20.2.1 스토어드 루틴 구문
스토어드 루틴은 프로 시저 또는 함수 중 하나입니다. 스토어드 루틴은 CREATE PROCEDURE
및 CREATE FUNCTION
문에서 만들어집니다 ( 섹션 13.1.15 "CREATE PROCEDURE 및 CREATE FUNCTION 구문" 을 참조하십시오). 프로시 저는 CALL
문을 사용하여 호출 ( 섹션 13.2.1 "CALL 구문" 을 참조하십시오) 출력 변수의 사용에서만 값을 복원 할 수 있습니다. 함수는 다른 함수와 마찬가지로 (즉, 함수의 이름을 호출하여) 문 내부에서 호출 할 수 스칼라 값을 반환 할 수 있습니다. 스토어드 루틴의 본체는 복합 문을 사용할 수 있습니다 ( 섹션 13.6 "MySQL 복합 문"부분 을 참조하십시오).
스토어드 루틴은 DROP PROCEDURE
및 DROP FUNCTION
문에서 삭제할 수 ( 섹션 13.1.26 "DROP PROCEDURE 및 DROP FUNCTION 구문" 을 참조하십시오) ALTER PROCEDURE
및 ALTER FUNCTION
문에서 변경할 수 있습니다 ( 섹션 13.1.5 "ALTER PROCEDURE 구문 " 을 참조하십시오).
저장 프로 시저 또는 저장 함수는 특정 데이터베이스에 연결되어 있습니다. 여기에는 몇 가지 문제가 있습니다.
루틴이 호출 될 때 암시 적
USE
이 실행됩니다 (그 루틴이 종료하면 원래대로 돌아옵니다). 스토어드 루틴 내에서db_name
USE
문은 허용되지 않습니다.데이터베이스 이름으로 루틴 이름을 규정 할 수 있습니다. 이것은 현재 데이터베이스에 존재하지 않는 루틴을 참조하는 경우에 사용할 수 있습니다. 예를 들어,
test
데이터베이스에 대한 저장 프로 시저p
또는 스토어드 함수f
를 호출하려면CALL test.p()
또는test.f()
로 지정합니다.데이터베이스를 삭제하면 해당 데이터베이스에 연결된 모든 스토어드 루틴도 삭제됩니다.
스토어드 함수는 재귀 함수는 없습니다.
저장 프로 시저에서 재귀 허용되어 있지만 기본적으로 비활성화되어 있습니다. 재귀를 사용하려면 max_sp_recursion_depth
서버 시스템 변수를 양수 값으로 설정합니다. 저장 프로 시저의 재귀하여 스레드 스택 공간의 수요가 증가하고 있습니다. max_sp_recursion_depth
값을 늘리면 서버 시작시 thread_stack
의 값을 증가시켜 스레드 스택 크기를 늘리는 것이 필요한 경우도 있습니다. 자세한 내용은 섹션 5.1.4 "서버 시스템 변수" 를 참조하십시오.
MySQL은 일반 SELECT
문을 저장 프로 시저 내에서 (즉, 커서 또는 로컬 변수를 사용하지 않고) 사용 할 수있는 매우 유용한 확장을 지원하고 있습니다. 이러한 쿼리의 결과 집합은 단순히 클라이언트로 직접 전송됩니다. 여러 SELECT
문은 여러 결과 집합을 생성하므로 클라이언트는 여러 결과 집합을 지원하는 MySQL 클라이언트 라이브러리를 사용해야합니다. 이것은 클라이언트가 4.1 이후의 MySQL 버전에서 클라이언트 라이브러리를 사용할 필요가 있다는 것을 의미합니다. 클라이언트는 연결할 때 CLIENT_MULTI_RESULTS
옵션도 지정해야합니다. C 프로그램의 경우 이것은 mysql_real_connect()
C API 함수에서 실행할 수 있습니다. 섹션 23.8.7.53 "mysql_real_connect ()" 및 섹션 23.8.17 "여러 문 실행의 C API 지원" 을 참조하십시오.