프로시저 호출

프로시저는 데이터 원본에 저장된 실행 개체입니다. 일반적으로 미리 컴파일된 하나 이상의 SQL 문입니다. 프로시저를 호출하기 위한 이스케이프 시퀀스는

{[?=]callprocedure-name[([parameter][,[parameter]]...)]}

여기서 procedure-name 은 프로시저의 이름을 지정하고 매개 변수 는 프로시저 매개 변수를 지정합니다.

프로시저 호출 이스케이프 시퀀스에 대한 자세한 내용은 부록 C: SQL 문법의 프로시저 호출 이스케이프 시퀀스를 참조하세요.

프로시저에는 0개 이상의 매개 변수가 있을 수 있습니다. 구문의 시작 부분에 있는 선택적 매개 변수 표 식 ?= 에 표시된 대로 값을 반환할 수도 있습니다. 매개 변수가 입력 또는 입력/출력 매개 변수인 경우 리터럴 또는 매개 변수 마커일 수 있습니다. 그러나 상호 운용 가능한 애플리케이션은 일부 데이터 원본이 리터럴 매개 변수 값을 허용하지 않으므로 항상 매개 변수 표식을 사용해야 합니다. 매개 변수가 출력 매개 변수인 경우 매개 변수 표식이어야 합니다. 프로시저 호출 문이 실행되기 전에 매개 변수 마커를 SQLBindParameter바인딩해야 합니다.

입력 및 입력/출력 매개 변수는 프로시저 호출에서 생략할 수 있습니다. 프로시저가 괄호로 호출되지만 {call procedure-name()}과 같은 매개 변수가 없는 경우 드라이버는 데이터 원본에 첫 번째 매개 변수의 기본값을 사용하도록 지시합니다. 프로시저에 매개 변수가 없으면 프로시저가 실패할 수 있습니다. {call procedure-name}과 같은 프로시저가 괄호 없이 호출되는 경우 드라이버는 매개 변수 값을 보내지 않습니다.

프로시저 호출 시 리터럴을 입력 및 입/출력 매개 변수로 지정할 수 있습니다. 예를 들어 InsertOrder 프로시저에 5개의 입력 매개 변수가 있다고 가정합니다. 다음 InsertOrder 호출은 첫 번째 매개 변수를 생략하고 두 번째 매개 변수에 대한 리터럴을 제공하며 세 번째, 네 번째 및 다섯 번째 매개 변수에 대한 매개 변수 마커를 사용합니다.

{call InsertOrder(, 10, ?, ?, ?)}   // Not interoperable!  

매개 변수를 생략하면 다른 매개 변수에서 구분하는 쉼표가 계속 나타나야 합니다. 입력 또는 입력/출력 매개 변수를 생략하면 프로시저에서 매개 변수의 기본값을 사용합니다. 입력 또는 입력/출력 매개 변수의 기본값을 지정하는 또 다른 방법은 매개 변수에 바인딩된 길이/표시기 버퍼의 값을 SQL_DEFAULT_PARAM 설정하는 것입니다.

입력/출력 매개 변수를 생략하거나 매개 변수에 리터럴이 제공된 경우 드라이버는 출력 값을 카드. 마찬가지로 프로시저의 반환 값에 대한 매개 변수 표식을 생략하면 드라이버는 반환 값을 카드. 마지막으로, 애플리케이션이 값을 반환하지 않는 프로시저에 대한 반환 값 매개 변수를 지정하는 경우 드라이버는 매개 변수에 바인딩된 길이/표시기 버퍼의 값을 SQL_NULL_DATA 설정합니다.

프로시저 PARTS_IN_ORDERS 특정 부품 번호를 포함하는 주문 목록이 포함된 결과 집합을 만든다고 가정합니다. 다음 코드는 544부에 대해 이 절차를 호출합니다.

SQLUINTEGER   PartID;  
SQLINTEGER    PartIDInd = 0;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0,  
                  &PartID, 0, PartIDInd);  
  
// Place the department number in PartID.  
PartID = 544;  
  
// Execute the statement.  
SQLExecDirect(hstmt, "{call PARTS_IN_ORDERS(?)}", SQL_NTS);  

데이터 원본이 프로시저를 지원하는지 여부를 확인하기 위해 애플리케이션은 SQL_PROCEDURES 옵션을 사용하여 SQLGetInfo를 호출합니다.

프로시저에 대한 자세한 내용은 프로시저를 참조 하세요.