다음을 통해 공유


Procedure Parameters

프로시저 호출의 매개 변수는 입력, 입력/출력 또는 출력 매개 변수일 수 있습니다. 이는 항상 입력 매개 변수인 다른 모든 SQL 문의 매개 변수와 다릅니다.

입력 매개 변수는 프로시저에 값을 보내는 데 사용됩니다. 예를 들어 파트 테이블에 PartID, Description 및 Price 열이 있다고 가정합니다. InsertPart 프로시저에는 테이블의 각 열에 대한 입력 매개 변수가 있을 수 있습니다. 예시:

{call InsertPart(?, ?, ?)}  

드라이버는 SQLExecDirect 또는 SQLExecute가 SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE 또는 SQL_NO_DATA 반환할 때까지 입력 버퍼의 내용을 수정해서는 안 됩니다. 입력 버퍼의 내용은 SQLExecDirect 또는 SQLExecute가 SQL_NEED_DATA 또는 SQL_STILL_EXECUTING 반환하는 동안 수정해서는 안 됩니다.

입력/출력 매개 변수는 프로시저에 값을 보내고 프로시저에서 값을 검색하는 데 모두 사용됩니다. 입력 및 출력 매개 변수와 동일한 매개 변수를 사용하는 것은 혼동되는 경향이 있으므로 피해야 합니다. 예를 들어 프로시저가 주문 ID를 수락하고 고객의 ID를 반환한다고 가정합니다. 단일 입력/출력 매개 변수를 사용하여 정의할 수 있습니다.

{call GetCustID(?)}  

주문 ID의 입력 매개 변수와 고객 ID에 대한 출력 또는 입력/출력 매개 변수의 두 매개 변수를 사용하는 것이 더 좋을 수 있습니다.

{call GetCustID(?, ?)}  

출력 매개 변수는 프로시저 반환 값을 검색하고 프로시저 인수에서 값을 검색하는 데 사용됩니다. 값을 반환하는 프로시저를 함수라고 도 합니다. 예를 들어 GetCustID 프로시저가 멘션 순서를 찾을 수 있는지 여부를 나타내는 값을 반환한다고 가정합니다. 다음 호출에서 첫 번째 매개 변수는 프로시저 반환 값을 검색하는 데 사용되는 출력 매개 변수이고, 두 번째 매개 변수는 주문 ID를 지정하는 데 사용되는 입력 매개 변수이고, 세 번째 매개 변수는 고객 ID를 검색하는 데 사용되는 출력 매개 변수입니다.

{? = call GetCustID(?, ?)}  

드라이버는 다른 SQL 문의 입력 매개 변수와 다르지 않은 프로시저의 입력 및 입력/출력 매개 변수 값을 처리합니다. 문이 실행되면 이러한 매개 변수에 바인딩된 변수의 값을 검색하여 데이터 원본으로 보냅니다.

문이 실행된 후 드라이버는 해당 매개 변수에 바인딩된 변수에 입력/출력 및 출력 매개 변수의 반환된 값을 저장합니다. 이러한 반환된 값은 프로시저에서 반환된 모든 결과를 가져오고 SQLMoreResults 가 SQL_NO_DATA 반환될 때까지 설정되지 않습니다. 문을 실행하면 오류가 발생하면 입력/출력 매개 변수 버퍼 또는 출력 매개 변수 버퍼의 내용이 정의되지 않습니다.

애플리케이션은 SQLProcedure를 호출하여 프로시저에 반환 값이 있는지 여부를 확인합니다. SQLProcedureColumns를 호출 하여 각 프로시저 매개 변수의 형식(반환 값, 입력, 입력/출력 또는 출력)을 결정합니다 .