• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    1. CALL 구문
    2. DELETE 구문
    3. DO 구문
    4. HANDLER 구문
    5. INSERT 구문
    6. LOAD DATA INFILE 구문
    7. LOAD XML 구문
    8. REPLACE 구문
    9. SELECT 구문
    10. 서브 쿼리 구문
    11. UPDATE 구문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.2.1 CALL 구문

 CALL sp_name ( parameter [, ...]]) CALL sp_name [()] 

CALL 문은 이전에 CREATE PROCEDURE 를 사용하여 정의 된 저장 프로 시저를 호출합니다.

인수를 취하지 않는 저장 프로 시저는 괄호없이 호출 할 수 있습니다. 즉, CALL p() 와 CALL p 는 동일합니다.

CALL 은 OUT 또는 INOUT 매개 변수로 선언 된 매개 변수를 사용하여 해당 호출자에게 값을 반환 할 수 있습니다. 프로 시저에서 반환 될 때 클라이언트 프로그램 루틴에서 실행 된 마지막 문에서 영향을받은 행수를 취득 할 수 있습니다. SQL 레벨에서 ROW_COUNT() 함수를 호출합니다. C API에서는 mysql_affected_rows() 함수를 호출합니다.

OUT 또는 INOUT 매개 변수를 사용하여 프로 시저에서 값을 검색하려면 사용자 변수를 사용하여이 매개 변수를 전달하여 프로 시저에서 돌아온 뒤에 변수의 값을 확인합니다. (프로 시저를 다른 저장 프로 시저 또는 저장 함수 내에서 호출하는 경우, IN 또는 INOUT 매개 변수로 루틴 파라미터 또는 로컬 루틴 변수를 전달할 수 있습니다.) INOUT 매개 변수의 경우 프로 시저에 전달하기 전에 값을 초기화하십시오. 다음 프로시 저는이 프로 시저가 현재 서버 버전으로 설정 OUT 매개 변수와 프로 시저가 현재 값에서 1 씩 증가 INOUT 값이 포함되어 있습니다.

 CREATE PROCEDURE p (OUT ver_param VARCHAR (25) INOUT incr_param INT)
 BEGIN
   # Set value of OUT parameter
   SELECT VERSION () INTO ver_param;
   # Increment value of INOUT parameter
   SET incr_param = incr_param + 1;
 END;

이 프로 시저를 호출하기 전에 INOUT 매개 변수로 전달되는 변수를 초기화합니다. 이 프로 시저를 호출 한 뒤,이 두 변수의 값은 설정 또는 변경되어 있습니다.

mysql> SET @increment = 10;
mysql> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+--------------+------------+
| @version     | @increment |
+--------------+------------+
| 5.5.3-m3-log |         11 |
+--------------+------------+

PREPARE 및 EXECUTE 에서 사용되는 준비된 CALL 문에서 IN 매개 변수 자리 표시자를 사용할 수 있습니다. OUT 및 INOUT 파라미터의 경우, 플레이스 홀더의 지원은 MySQL 5.5.3 이상에서 사용할 수 있습니다. 이러한 유형의 매개 변수는 다음과 같이 사용할 수 있습니다.

mysql> SET @increment = 10;
mysql> PREPARE s FROM 'CALL p(?, ?)';
mysql> EXECUTE s USING @version, @increment;
mysql> SELECT @version, @increment;
+--------------+------------+
| @version     | @increment |
+--------------+------------+
| 5.5.3-m3-log |         11 |
+--------------+------------+

MySQL 5.5.3 이전에는 OUT 또는 INOUT 매개 변수 자리 표시 자 지원은 사용할 수 없습니다. OUT 및 INOUT 매개 변수에 대한 제한 규정을 피하기 위해 자리 표시자를 사용하지 마십시오. 대신 사용자 변수를 CALL 문 자체에서 참조하고 EXECUTE 문은 지정하지 마십시오.

mysql> SET @increment = 10;
mysql> PREPARE s FROM 'CALL p(@version, @increment)';
mysql> EXECUTE s;
mysql> SELECT @version, @increment;
+--------------+------------+
| @version     | @increment |
+--------------+------------+
| 5.5.0-m2-log |         11 |
+--------------+------------+

CALL SQL 문을 사용하여 결과 세트를 생성하는 저장 프로 시저를 실행하는 C 프로그램을 작성하려면 CLIENT_MULTI_RESULTS 플래그가 활성화되어 있어야합니다. 이것은 각 CALL 에 의해 프로 시저 내에서 실행되는 문에 의해 반환 될 수있는 결과 세트 이외에 호출 상태를 나타 내기위한 결과가되기 때문입니다. CLIENT_MULTI_RESULTS 는 CALL 이 준비된 명령문이 포함 된 저장 프로 시저를 실행하는 데 사용되는 경우에도 활성화해야합니다. 이러한 프로 시저가 언제로드 될까나 이러한 문에서 결과 집합이 생성되는지 여부를 확인할 수 없기 때문에 이러한 가정해야합니다.

CLIENT_MULTI_RESULTS 는 mysql_real_connect() 를 호출 할 때 CLIENT_MULTI_RESULTS 플래그 자체를 전달하여 명시 적으로 또는 CLIENT_MULTI_STATEMENTS 을 전달하여 암시 적으로 사용하는 (따라서 CLIENT_MULTI_RESULTS 도 적용됩니다) 수 있습니다. MySQL 5.6에서는 CLIENT_MULTI_RESULTS 은 기본적으로 활성화되어 있습니다.

mysql_query() 또는 mysql_real_query() 를 사용하여 실행 된 CALL 문 결과를 처리하려면 그 이상의 결과가 존재하는지 여부를 판정하기 위해서 mysql_next_result() 를 호출하는 루프를 사용하십시오. 예를 들어, 섹션 23.8.17 "여러 문 실행의 C API 지원" 을 참조하십시오.

MySQL 인터페이스를 갖는 언어로 작성된 프로그램의 경우 CALL 문에서 OUT 또는 INOUT 매개 변수의 결과를 직접 얻을 수있는 네이티브 메소드가 MySQL 5.5.3 이전에는 존재하지 않습니다. 이러한 매개 변수 값을 얻으려면, CALL 문에서 프로 시저에 사용자 정의 변수를 건네 준 뒤, SELECT 문을 실행하여 변수 값을 포함한 결과 세트를 생성합니다. INOUT 매개 변수를 처리하려면 CALL 전에 해당 사용자 변수를 프로 시저에 전달되는 값으로 설정하는 명령을 실행하십시오.

다음 예제는 앞서 설명한 OUT 파라미터와 INOUT 파라미터를 포함한 저장 프로 시저 p 의 방법 (오류 검사는 없음)를 보여줍니다.

 mysql_query (mysql "SET @increment = 10");
 mysql_query (mysql "CALL p (@version, @increment)");
 mysql_query (mysql "SELECT @version, @increment");
 result = mysql_store_result (mysql);
 row = mysql_fetch_row (result);
 mysql_free_result (result);

이전 코드가 실행 된 후 row[0] 과 row[1] 는 각각 @version 과 @increment 값이 포함되어 있습니다.

MySQL 5.6에서는 C 프로그램은 준비된 명령문 인터페이스를 사용하여 CALL 문을 실행하고 OUT 및 INOUT 매개 변수에 액세스 할 수 있습니다. 이것은 더 이상 결과가 존재하는지 여부를 판정하기 위해 mysql_stmt_next_result() 를 호출하는 루프를 사용하여 CALL 문 결과를 처리함으로써 이루어집니다. 예를 들어, 섹션 23.8.20 "C API의 준비된 CALL 문 지원" 을 참조하십시오. MySQL 인터페이스를 갖는 언어는 준비된 CALL 문을 사용하여 OUT 및 INOUT 시저 매개 변수를 직접 얻을 수 있습니다.

MySQL 5.6.6 이후에서는 저장 프로그램에 의해 참조되는 개체에 대한 메타 데이터 변경이 감지되고 프로그램이 다음 실행 때 영향을받는 문 자동 재 해석이 이루어지게됩니다. 자세한 내용은 섹션 8.9.4 "준비된 문 및 저장 프로그램 캐시" 를 참조하십시오.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved