Loading...
MySQL 9.5 Reference Manual 9.5의 27.2.1 Stored Routine Syntax의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Stored routine은 procedure 또는 function입니다. Stored routine은 CREATE PROCEDURE 및 CREATE FUNCTION statement로 생성합니다(참고:
Section 15.1.21, “CREATE PROCEDURE and CREATE FUNCTION Statements”). Procedure는 CALL statement를 사용해 호출하며(참고:
Section 15.2.1, “CALL Statement”), output variable을 사용해서만 값을 되돌려 줄 수 있습니다. Function은 다른 function과 마찬가지로 statement 내부에서(즉, function 이름을 호출함으로써) 호출할 수 있으며, 스칼라 값을 반환할 수 있습니다. Stored routine의 body는 복합 statement를 사용할 수 있습니다(참고:
Section 15.6, “Compound Statement Syntax”).
Stored routine은 특정 데이터베이스와 연관됩니다. 이는 여러 가지 의미를 갖습니다:
Routine이 호출되면, 암묵적으로 USE db_name이 수행되며 routine이 종료될 때 이 동작이 취소됩니다. Stored routine 내에서는 USE statement를 사용할 수 없습니다.
Routine 이름을 데이터베이스 이름과 함께 지정할 수 있습니다. 이를 사용해 현재 데이터베이스가 아닌 routine을 참조할 수 있습니다. 예를 들어, test 데이터베이스와 연관된 stored procedure p 또는 function f를 호출하기 위해 CALL test.p() 또는 test.f()라고 쓸 수 있습니다.
데이터베이스가 drop되면, 그와 연관된 모든 stored routine도 함께 drop됩니다.
Stored function은 재귀적으로 사용할 수 없습니다.
Stored procedure에서 재귀 호출은 허용되지만 기본적으로는 비활성화되어 있습니다. 재귀 호출을 활성화하려면 max_sp_recursion_depth 서버 시스템 변수(server system variable)를 0보다 큰 값으로 설정합니다. Stored procedure 재귀 호출은 스레드 스택 공간에 대한 요구를 증가시킵니다. max_sp_recursion_depth의 값을 증가시키는 경우, 서버 시작 시 thread_stack의 값을 증가시켜 스레드 스택 크기를 늘려야 할 수도 있습니다. 자세한 내용은
Section 7.1.8, “Server System Variables”을 참고하십시오.
MySQL은 stored procedure 내부에서 일반 SELECT statement(즉, 커서나 로컬 변수를 사용하지 않는)를 사용할 수 있게 해 주는 매우 유용한 확장을 지원합니다. 이러한 쿼리의 결과 집합(result set)은 단순히 클라이언트로 직접 전송됩니다. 여러 개의 SELECT statement는 여러 개의 결과 집합을 생성하므로, 클라이언트는 다중 결과 집합을 지원하는 MySQL 클라이언트 라이브러리를 사용해야 합니다. 이는 클라이언트가 최소한 MySQL 4.1 이상 버전의 클라이언트 라이브러리를 사용해야 함을 의미합니다.
또한 클라이언트는 접속 시 CLIENT_MULTI_RESULTS 옵션을 지정해야 합니다. C 프로그램의 경우, 이는 mysql_real_connect() C API function으로 수행할 수 있습니다. mysql_real_connect() 및
Multiple Statement Execution Support를 참고하십시오.
Stored procedure의 statement에서 참조되는 사용자 변수(user variable)는 procedure가 처음 호출될 때 그 타입이 결정되며, 이후 procedure가 호출될 때마다 이 타입을 유지합니다.
27.2 Using Stored Routines
27.2.2 Stored Routines and MySQL Privileges