Loading...
MySQL 9.5 Reference Manual 9.5의 27.3.1 JavaScript Stored Program Creation and Management의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
JavaScript로 작성된 stored function 또는 stored procedure는 여기 나열된 차이점들을 제외하면, SQL로 작성된 것과 거의 동일한 방식으로 생성, 호출, 유지 관리됩니다:
CREATE FUNCTION 또는
CREATE PROCEDURE 문에서
LANGUAGE JAVASCRIPT를 사용하여 명시적으로 선언해야 합니다. 그렇지 않으면 MySQL은 의도된 언어가 SQL이라고 가정합니다.routine body의 구문은 생성 시점에 검사되며, 오류가 있는 경우 CREATE 문은 거부되고 stored program은 생성되지 않습니다.
AS 키워드와 $$, $js$, $mysql$ 등과 같은 dollar-quoted 구분자를 사용하여 경계를 표시해야 합니다. routine body의 시작과 끝을 표시할 때는 동일한 구분자를 사용해야 합니다. routine body를 구분하기 위해 따옴표를 사용할 수도 있지만, 함수 또는 procedure 코드에서 문자열을 quoting할 때 발생할 수 있는 문제를 피할 수 있으므로 dollar-quoted 구분자를 사용하는 것이 더 좋습니다.첫 번째 dollar-quoted 구분자 이후에, routine body 내에서 새 줄마다
mysql 클라이언트 프롬프트는 닫는 dollar-quoted 구분자를 만날 때까지 $>로 변경되며, 그 이후에는 프롬프트가 기본값(일반적으로 ->)으로 되돌아갑니다. 이는 이전에 add_nos() 함수를 생성하는 데 사용된 CREATE FUNCTION 문에서 확인할 수 있습니다.
; 문자를 사용할 경우, 이는 SQL statement 구분자가 아니라 JavaScript routine의 일부로 올바르게 해석되며, 다음 예와 같습니다:1mysql> CREATE FUNCTION js_pow(arg1 INT, arg2 INT) 2 -> RETURNS INT LANGUAGE JAVASCRIPT 3 -> AS 4 -> $$ 5 $> let x = Math.pow(arg1, arg2); 6 $> return x; 7 $> $$ 8 -> ; 9Query OK, 0 rows affected (0.02 sec) 10 11mysql> SELECT js_pow(2,3); 12+-------------+ 13| js_pow(2,3) | 14+-------------+ 15| 8 | 16+-------------+ 171 row in set (0.00 sec)
혼동을 최소화하기 위해, 이 절의 나머지 예에서는 어떠한 JavaScript 구문에도 ; 구분자를 사용하지 않습니다.
utfmb4로 처리됩니다. 이는 클라이언트가 routine body에 어떤 문자 집합을 사용하든지 간에, 서버가 이를 데이터 딕셔너리에 저장하기 전에 utf8mb4로 변환한다는 의미입니다. utf8mb4는 지원되는 다른 모든 문자 집합을 포함하므로, 이는 문제가 되지 않아야 합니다.JavaScript program 인자와 routine 이름은 SQL stored program과 마찬가지로 utfmb3 문자 집합을 사용해야 합니다. Section 12.9, “Unicode Support”를 참조하십시오.
utf8mb4로 예상됩니다. 이는 JavaScript stored program이 속한 스키마의 기본 문자 집합이 다른 문자 집합인 경우, 그 프로그램의 모든 인자는 utf8mb4로 명시적으로 선언되어야 함을 의미합니다.입력 인자 이름은 JavaScript 식별자에 대한 규칙을 따라야 합니다. 유니코드 문자, $, _, 숫자(0–9)를 포함할 수 있지만, 숫자로 시작할 수는 없습니다.
JavaScript에서 예약된 단어(예: var 또는 function)를 인자 이름으로 사용하면 오류가 발생합니다. MySQL JavaScript stored program은 항상 strict mode를 사용하므로, 여기에는 package 및 let과 같은 키워드도 포함됩니다. 이들의 전체 목록은
Reserved Words를 참조하십시오. 추가로, 키워드 mysql, console, graal 역시 MLE 컴포넌트에 의해 예약되어 있으며, MySQL JavaScript stored program에서 변수 또는 인자 이름으로 사용할 수 없습니다.
ALTER FUNCTION 및
ALTER PROCEDURE를 사용하여 SQL stored function 또는 procedure와 동일한 방식으로 수정할 수 있습니다. ALTER를 사용하여 언어를 변경하는 것은 지원되지 않습니다. 이러한 경우에는
DROP FUNCTION 또는
DROP PROCEDURE를 해당되는 대로 사용한 다음, 적절한 CREATE 문을 사용하여 stored program을 다시 생성해야 합니다.서버의 모든 데이터베이스에 있는 모든 JavaScript stored program의 목록을 얻으려면, 다음과 같이 Information Schema
ROUTINES 테이블을 조회합니다:
1mysql> SELECT CONCAT(ROUTINE_SCHEMA, '.', ROUTINE_NAME) AS "JS Stored Routines" 2 -> FROM INFORMATION_SCHEMA.ROUTINES 3 -> WHERE EXTERNAL_LANGUAGE="JAVASCRIPT"; 4+------------------------+ 5| JS Stored Routines | 6+------------------------+ 7| test.pc1 | 8| test.pc2 | 9| world.jssp_simple1 | 10| test.jssp_vsimple | 11| test.jssp_simple | 12| world.jssp_vsimple | 13| world.jssp_vsimple2 | 14| world.jssp_simple_meta | 15+------------------------+ 168 rows in set (0.00 sec)
27.3 JavaScript Stored Programs
27.3.2 Obtaining Information About JavaScript Stored Programs