Loading...
MySQL 9.5 Reference Manual 9.5의 27.3.11 JavaScript Stored Program Limitations and Restrictions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL JavaScript 저장 프로그램은 이 절에서 설명하는 제한과 제약의 적용을 받습니다.
Global 객체와 globalThis 객체 프로퍼티는 지원되지만, 그 스코프는 현재 루틴의 스코프로 제한됩니다. 예를 들어, 주어진 JavaScript 프로그램이 globalThis.myProp = 10을 설정한 경우, 이는 동일한 세션 내에서도 다른 JavaScript 프로그램에서는 사용할 수 없으며, 같은 JavaScript 프로그램의 이후 호출에서 globalThis.myProp에 접근하더라도 동일한 값을 제공하지 않습니다.
하나의 저장 프로그램에서 정의된 JavaScript 변수(로컬이든 전역이든)는 같은 프로그램을 실행하는 다른 어떤 커넥션에서도 접근할 수 없습니다.
JavaScript 저장 프로그램 코드에서의 파일 액세스와 네트워크 액세스는 지원되지 않습니다. MySQL의 JavaScript 저장 프로그램은 서드파티 모듈 사용을 제공하지 않으므로, import 문은 지원되지 않습니다. 또한 Node.js도 지원되지 않습니다.
MLE 컴포넌트는 단일 스레드 실행 모델(쿼리당 하나의 스레드)을 사용합니다. 이는 JavaScript Promise 객체 및 async 함수와 같은 모든 비동기 기능이 시뮬레이션되며 비결정적(non-deterministic) 동작을 보일 수 있음을 의미합니다. await되지 않은 Promise는 저장 프로그램 실행이 끝날 때까지 처리되지 않으므로, 저장 함수의 반환 인자 값이나 저장 프로시저의 출력 인자 값에 영향을 줄 수 없습니다.
SQL 저장 루틴과 마찬가지로, 가변 개수의 인자를 갖는 JavaScript 저장 루틴은 지원되지 않습니다. 각 인자와 그 타입은 생성 시점에 지정해야 합니다. 루틴 내의 JavaScript 함수는 가변 개수의 인자를 가질 수 있습니다.
JavaScript 저장 프로그램의 본문에서 다른 저장 프로그램을 호출하는 것이 가능하며, 저장 프로시저, 저장 함수, 이벤트, 트리거를 포함한 SQL 저장 프로그램 내에서 JavaScript 저장 프로그램을 호출하는 것도 다른 곳에 나온 예와 같이 가능합니다(참고:
Section 27.3.12, “JavaScript Stored Program Examples”). JavaScript 저장 프로그램은 자기 자신을 재귀적으로 호출할 수도 있습니다. 또한 다음 예와 같이 JavaScript 저장 프로그램 내에서 순수 JavaScript 함수 또는 메서드를 재귀적으로 호출하는 것도 가능합니다:
1mysql> CREATE FUNCTION recursive_sum(my_num INT) 2 -> RETURNS INT NO SQL LANGUAGE JAVASCRIPT AS 3 -> $$ 4 $> function sum(n) { 5 $> if(n <= 1) return n 6 $> else return n + sum(--n) 7 $> } 8 $> 9 $> let x = sum(my_num) 10 $> return x 11 $> $$ 12 -> ; 13Query OK, 0 rows affected (0.01 sec) 14 15mysql> SELECT recursive_sum(1), recursive_sum(2), 16 -> recursive_sum(20), recursive_sum(100)\G 17*************************** 1. row *************************** 18 recursive_sum(1): 1 19 recursive_sum(2): 3 20 recursive_sum(20): 210 21recursive_sum(100): 5050 221 row in set (0.00 sec)
재귀 깊이는 1000으로 제한됩니다. 지나친 재귀는 다음과 같이 프로그램 실패를 유발할 수 있습니다:
1mysql> SELECT recursive_sum(1000); 2ERROR 6113 (HY000): JavaScript> Maximum frame limit of 1000 exceeded. Frames on stack: 1001.
JavaScript 저장 프로그램은 MySQL 복제에서 지원되며, MLE 컴포넌트가 토폴로지 내의 모든 서버에 설치되어 있다는 조건이 있습니다. 자세한 내용은
Section 19.5.1.18, “Replication and JavaScript Stored Programs”을 참조하십시오.
27.3.10 JavaScript GenAI API
27.3.12 JavaScript Stored Program Examples