SQLParamData 함수
규칙
버전 소개: ODBC 1.0 표준 준수: ISO 92
요약
SQLParamData는 SQLPutData와 함께 사용하여 문 실행 시 매개 변수 데이터를 제공하고 SQLGetData와 함께 스트리밍된 출력 매개 변수 데이터를 검색합니다.
구문
SQLRETURN SQLParamData(
SQLHSTMT StatementHandle,
SQLPOINTER * ValuePtrPtr);
인수
StatementHandle
[입력] 문 핸들입니다.
ValuePtrPtr
[출력] SQLBindParameter에 지정된 ParameterValuePtr 버퍼의 주소(매개 변수 데이터의 경우) 또는 SQLBindCol(열 데이터의 경우)에 지정된 TargetValuePtr 버퍼의 주소를 반환하는 SQL_DESC_DATA_PTR 설명자 레코드 필드에 포함된 버퍼에 대한 포인터입니다.
반품
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_INVALID_HANDLE 또는 SQL_PARAM_DATA_AVAILABLE.
진단
SQLParamData가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 반환하는 경우 SQL_HANDLE_STMT HandleType 및 Handle of StatementHandle을 사용하여 SQLGetDiagRec 를 호출하여 관련 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 일반적으로 SQLParamData에서 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각각에 대해 설명합니다. 표기법 "(DM)"은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 나와 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.
SQLSTATE | 오류 | 설명 |
---|---|---|
01000 | 일반 경고 | 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다. |
07006 | 제한된 데이터 형식 특성 위반 | 바인딩된 매개 변수에 대한 SQLBindParameter의 ValueType 인수로 식별된 데이터 값을 SQLBindParameter의 ParameterType 인수로 식별된 데이터 형식으로 변환할 수 없습니다. SQL_PARAM_INPUT_OUTPUT 또는 SQL_PARAM_OUTPUT 바인딩된 매개 변수에 대해 반환된 데이터 값을 SQLBindParameter의 ValueType 인수로 식별된 데이터 형식으로 변환할 수 없습니다. 하나 이상의 행에 대한 데이터 값을 변환할 수 없지만 하나 이상의 행이 성공적으로 반환된 경우 이 함수는 SQL_SUCCESS_WITH_INFO 반환합니다. |
08S01 | 통신 링크 실패 | 드라이버와 드라이버가 연결된 데이터 원본 간의 통신 링크는 함수가 처리를 완료하기 전에 실패했습니다. |
22026 | 문자열 데이터, 길이 불일치 | SQLGetInfo의 SQL_NEED_LONG_DATA_LEN 정보 형식은 "Y"이고, SQLBindParameter의 StrLen_or_IndPtr 인수로 지정된 것보다 긴 매개 변수(데이터 형식이 SQL_LONGVARCHAR, SQL_LONGVARBINARY 또는 긴 데이터 원본별 데이터 형식임)에 대해 전송된 데이터가 적습니다. SQLGetInfo의 SQL_NEED_LONG_DATA_LEN 정보 유형은 "Y"이고, SQLBulkOperations로 추가되거나 업데이트되거나 SQLSetPos로 업데이트된 데이터 행의 열에 해당하는 길이 버퍼에 지정된 것보다 긴 열(데이터 형식이 SQL_LONGVARCHAR, SQL_LONGVARBINARY 또는 긴 데이터 원본별 데이터 형식)에 대해 전송된 데이터가 적습니다. |
40001 | Serialization 실패 | 다른 트랜잭션과의 리소스 교착 상태 때문에 트랜잭션이 롤백되었습니다. |
40003 | 문 완성을 알 수 없음 | 이 함수를 실행하는 동안 연결된 연결이 실패했으며 트랜잭션 상태를 확인할 수 없습니다. |
HY000 | 일반 오류 | 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다. |
HY001 | 메모리 할당 오류 | 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다. |
HY008 | 작업이 취소됨 | StatementHandle에 대해 비동기 처리를 사용하도록 설정했습니다. 함수가 호출되었고 실행이 완료되기 전에 StatementHandle에서 SQLCancel 또는 SQLCancelHandle이 호출되었습니다. 그런 다음 StatementHandle에서 함수를 다시 호출했습니다. 함수가 호출되었고 실행을 완료하기 전에 다중 스레드 애플리케이션의 다른 스레드에서 StatementHandle에서 SQLCancel 또는 SQLCancelHandle이 호출되었습니다. |
HY010 | 함수 시퀀스 오류 | (DM) 이전 함수 호출은 반환 코드가 SQL_NEED_DATA SQLExecDirect, SQLExecute, SQLBulkOperations 또는 SQLSetPos에 대한 호출이 아니거나 이전 함수 호출이 SQLPutData에 대한 호출이었습니다. 이전 함수 호출은 SQLParamData에 대한 호출이었습니다. (DM) StatementHandle과 연결된 연결 핸들에 대해 비동기적으로 실행되는 함수가 호출되었습니다. 이 비동기 함수는 SQLParamData 함수가 호출되었을 때 계속 실행되었습니다. (DM) 이 함수가 아닌 비동기 실행 함수가 StatementHandle에 대해 호출되었고 이 함수가 호출되었을 때 계속 실행되고 있었습니다. SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos가 StatementHandle에 대해 호출되고 SQL_NEED_DATA 반환되었습니다. SQLCancel 은 모든 실행 시 데이터 매개 변수 또는 열에 대한 데이터를 보내기 전에 호출되었습니다. |
HY013 | 메모리 관리 오류 | 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다. |
HY117 | 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. | (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요. |
HYT01 | 연결 제한 시간이 만료됨 | 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다. |
IM001 | 드라이버는 이 함수를 지원하지 않습니다. | (DM) StatementHandle에 해당하는 드라이버는 함수를 지원하지 않습니다. |
IM017 | 비동기 알림 모드에서 폴링을 사용할 수 없습니다. | 알림 모델을 사용할 때마다 폴링이 비활성화됩니다. |
IM018 | 이 핸들에서 이전 비동기 작업을 완료하기 위해 SQLCompleteAsync 가 호출되지 않았습니다. | 핸들의 이전 함수 호출이 SQL_STILL_EXECUTING 반환하고 알림 모드가 활성화된 경우 사후 처리를 수행하고 작업을 완료하려면 핸들에서 SQLCompleteAsync 를 호출해야 합니다. |
SQL 문에서 매개 변수에 대한 데이터를 보내는 동안 SQLParamData가 호출되는 경우 문을 실행하기 위해 호출된 함수에서 반환할 수 있는 모든 SQLSTATE(SQLExecute 또는 SQLExecDirect)를 반환할 수 있습니다. SQLBulkOperations를 사용하여 업데이트 또는 추가되거나 SQLSetPos로 업데이트되는 열에 대한 데이터를 보내는 동안 호출되는 경우 SQLBulkOperations 또는 SQLSetPos에서 반환할 수 있는 모든 SQLSTATE를 반환할 수 있습니다.
설명
SQLParamData는 SQLExecute 또는 SQLExecDirect 호출에 사용되는 매개 변수 데이터 또는 SQLBulkOperations 호출에 의해 업데이트되거나 추가되거나 SQLSetPos 호출에 의해 업데이트될 때 사용되는 열 데이터라는 두 가지 용도로 실행 시 데이터 데이터를 제공하도록 호출할 수 있습니다. 실행 시 SQLParamData 는 드라이버에 필요한 데이터의 표시기를 애플리케이션에 반환합니다.
애플리케이션이 SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos를 호출하는 경우 드라이버는 실행 시 데이터 데이터가 필요한 경우 SQL_NEED_DATA 반환합니다. 그런 다음 애플리케이션은 SQLParamData를 호출하여 보낼 데이터를 결정합니다. 드라이버에 매개 변수 데이터가 필요한 경우 드라이버는 *ValuePtrPtr 출력 버퍼에서 애플리케이션이 행 집합 버퍼에 넣은 값을 반환합니다. 애플리케이션은 이 값을 사용하여 드라이버가 요청하는 매개 변수 데이터를 확인할 수 있습니다. 드라이버에 열 데이터가 필요한 경우 드라이버는 다음과 같이 *ValuePtrPtr 버퍼에서 열이 원래 바인딩된 주소를 버퍼링합니다.
바인딩된 주소 + 바인딩 오프셋 + ((행 번호 - 1) x 요소 크기)
여기서 변수는 다음 표에 표시된 대로 정의됩니다.
변수 | 설명 |
---|---|
바인딩된 주소 | SQLBindCol에서 TargetValuePtr 인수로 지정된 주소입니다. |
바인딩 오프셋 | SQL_ATTR_ROW_BIND_OFFSET_PTR 문 특성으로 지정된 주소에 저장된 값입니다. |
Row Number | 행 집합에 있는 행의 1부터 시작하는 번호입니다. 기본값인 단일 행 페치의 경우 1입니다. |
요소 크기 | 데이터 및 길이/표시기 버퍼 모두에 대한 SQL_ATTR_ROW_BIND_TYPE 문 특성의 값입니다. |
또한 데이터를 보내기 위해 SQLPutData를 호출해야 하는 애플리케이션에 대한 표시기인 SQL_NEED_DATA 반환합니다.
애플리케이션은 열 또는 매개 변수에 대한 실행 시 데이터 데이터를 보내기 위해 SQLPutData를 필요한 횟수만큼 호출합니다. 열 또는 매개 변수에 대한 모든 데이터를 보낸 후 애플리케이션은 SQLParamData를 다시 호출합니다. SQLParamData가 다시 SQL_NEED_DATA 반환하는 경우 다른 매개 변수 또는 열에 대한 데이터를 보내야 합니다. 따라서 애플리케이션은 SQLPutData를 다시 호출합니다. 모든 매개 변수 또는 열에 대해 실행 중인 모든 데이터가 전송된 경우 SQLParamData는 SQL_SUCCESS 또는 SQL_SUCCESS_WITH_INFO 반환하고 * ValuePtrPtr의 값은 정의되지 않으며 SQL 문을 실행하거나 SQLBulkOperations 또는 SQLSetPos 호출을 처리할 수 있습니다.
SQLParamData가 데이터 원본의 행에 영향을 주지 않는 검색된 업데이트 또는 삭제 문에 대한 매개 변수 데이터를 제공하는 경우 SQLParamData 호출은 SQL_NO_DATA 반환합니다.
실행 시 데이터 매개 변수 데이터가 문 실행 시 전달되는 방법에 대한 자세한 내용은 SQLBindParameter의 "매개 변수 값 전달" 및 긴 데이터 보내기를 참조하세요. 실행 시 데이터 열 데이터를 업데이트하거나 추가하는 방법에 대한 자세한 내용은 SQLSetPos의 "SQLSetPos 사용" 섹션, SQLBulkOperations에서 "책갈피를 사용하여 대량 업데이트 수행" 및 Long Data 및 SQLSetPos 및 SQLBulkOperations 섹션을 참조하세요.
SQLParamData 를 호출하여 스트리밍된 출력 매개 변수를 검색할 수 있습니다. SQLMoreResults, SQLExecute, SQLGetData 또는 SQLExecDirect가 SQL_PARAM_DATA_AVAILABLE 반환하는 경우 SQLParamData를 호출하여 사용 가능한 값이 있는 매개 변수를 확인합니다. SQL_PARAM_DATA_AVAILABLE 및 스트리밍된 출력 매개 변수에 대한 자세한 내용은 SQLGetData를 사용하여 출력 매개 변수 검색을 참조하세요.
코드 예
SQLPutData를 참조하세요.
관련 함수
추가 정보 | 참조 |
---|---|
매개 변수에 버퍼 바인딩 | SQLBindParameter 함수 |
문 처리 취소 | SQLCancel 함수 |
문에서 매개 변수에 대한 정보 반환 | SQLDescribeParam 함수 |
SQL 문 실행 | SQLExecDirect 함수 |
준비된 SQL 문 실행 | SQLExecute 함수 |
실행 시 매개 변수 데이터 보내기 | SQLPutData 함수 |