Loading...
MySQL 9.5 Reference Manual 9.5의 15.2.1 CALL Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1CALL sp_name([parameter[,...]]) 2CALL sp_name[()]
CALL statement는 이전에
CREATE PROCEDURE로 정의된
저장 프로시저를 호출합니다.
인자를 받지 않는 저장 프로시저는 괄호 없이 호출할 수 있습니다. 즉,
CALL p()와 CALL p는 동일합니다.
CALL은 OUT 또는 INOUT
파라미터로 선언된 파라미터를 사용하여 호출자에게 값을 되돌려줄 수 있습니다.
프로시저가 반환될 때, 클라이언트 프로그램은 루틴 내에서 마지막으로 실행된
문에 의해 영향을 받은 행 수를 얻을 수도 있습니다.
SQL 레벨에서는 ROW_COUNT()
함수를 호출하고, C API에서는
mysql_affected_rows()
함수를 호출합니다.
처리되지 않은 컨디션이 프로시저 파라미터에 미치는 영향에 대한 정보는 Section 15.6.7.8, “Condition Handling and OUT or INOUT Parameters”를 참고하십시오.
OUT 또는 INOUT 파라미터를 사용하여 프로시저로부터
값을 돌려받으려면, 사용자 변수를 통해 파라미터를 전달한 다음,
프로시저가 반환된 후 그 변수의 값을 확인하십시오.
(다른 저장 프로시저나 함수 내부에서 해당 프로시저를 호출하는 경우,
루틴 파라미터나 로컬 루틴 변수를 IN 또는
INOUT 파라미터로 전달할 수도 있습니다.)
INOUT 파라미터의 경우, 프로시저에 전달하기 전에 그 값을 초기화해야 합니다.
다음 프로시저는 프로시저가 현재 서버 버전으로 설정하는
OUT 파라미터와, 현재 값에서 1 증가시키는
INOUT 값을 가집니다:
1DELIMITER // 2 3CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT) 4BEGIN 5 # Set value of OUT parameter 6 SELECT VERSION() INTO ver_param; 7 # Increment value of INOUT parameter 8 SET incr_param = incr_param + 1; 9END // 10 11DELIMITER ;
프로시저를 호출하기 전에, INOUT 파라미터로 전달할
변수를 초기화하십시오. 프로시저를 호출한 후에는 두 변수의 값이
설정되거나 변경된 것을 확인할 수 있습니다:
1mysql> SET @increment = 10; 2mysql> CALL p(@version, @increment); 3mysql> SELECT @version, @increment; 4+----------+------------+ 5| @version | @increment | 6+----------+------------+ 7| 9.5.0 | 11 | 8+----------+------------+
PREPARE 및
EXECUTE와 함께 사용하는
프리페어드 CALL statement에서는
IN 파라미터, OUT 파라미터, INOUT
파라미터에 플레이스홀더를 사용할 수 있습니다.
이러한 유형의 파라미터는 다음과 같이 사용할 수 있습니다:
1mysql> SET @increment = 10; 2mysql> PREPARE s FROM 'CALL p(?, ?)'; 3mysql> EXECUTE s USING @version, @increment; 4mysql> SELECT @version, @increment; 5+----------+------------+ 6| @version | @increment | 7+----------+------------+ 8| 9.5.0 | 11 | 9+----------+------------+
결과 집합을 생성하는 저장 프로시저를 실행하기 위해
CALL SQL statement를 사용하는
C 프로그램을 작성하려면 CLIENT_MULTI_RESULTS 플래그가
활성화되어 있어야 합니다. 이는 각
CALL이 프로시저 내에서 실행된
문이 반환할 수 있는 모든 결과 집합과 더불어
호출 상태를 나타내는 결과를 하나 반환하기 때문입니다.
CALL을 사용하여 프리페어드 statement를
포함하는 어떤 저장 프로시저든 실행하는 경우에도
CLIENT_MULTI_RESULTS가 활성화되어 있어야 합니다.
이러한 프로시저는 로드되는 시점에 그 statement들이 결과 집합을
생성하는지 여부를 판단할 수 없으므로, 결과 집합을 생성하는 것으로
간주해야 합니다.
CLIENT_MULTI_RESULTS는
mysql_real_connect()를 호출할 때,
CLIENT_MULTI_RESULTS 플래그 자체를 명시적으로
전달하거나, CLIENT_MULTI_RESULTS도 함께
활성화하는 CLIENT_MULTI_STATEMENTS를
전달하여 암묵적으로 활성화할 수 있습니다.
CLIENT_MULTI_RESULTS는 기본적으로 활성화된 상태입니다.
mysql_query() 또는
mysql_real_query()를 사용하여 실행된
CALL statement의 결과를 처리하려면,
더 많은 결과가 있는지 여부를 확인하기 위해
mysql_next_result()를 호출하는 루프를
사용하십시오. 예제는
Multiple Statement Execution Support를
참고하십시오.
C 프로그램은 프리페어드-스테이트먼트 인터페이스를 사용하여
CALL statement를 실행하고
OUT 및 INOUT 파라미터에 접근할 수 있습니다.
이는 CALL statement의 결과를 처리하면서,
더 많은 결과가 있는지 여부를 확인하기 위해
mysql_stmt_next_result()를 호출하는
루프를 사용하는 방식으로 수행됩니다. 예제는
Prepared CALL Statement Support를
참고하십시오. MySQL 인터페이스를 제공하는 언어는 프리페어드
CALL statement를 사용하여
OUT 및 INOUT 프로시저 파라미터를 직접
검색할 수 있습니다.
저장 프로그램이 참조하는 객체에 대한 메타데이터 변경 사항은 감지되며, 프로그램이 다음에 실행될 때 영향을 받는 문이 자동으로 재파싱됩니다. 자세한 내용은 Section 10.10.3, “Caching of Prepared Statements and Stored Programs”을 참고하십시오.
15.2 Data Manipulation Statements
15.2.2 DELETE Statement