SQLExecute 함수

규칙
버전 소개: ODBC 1.0 표준 준수: ISO 92

요약
SQLExecute 는 매개 변수 표식이 문에 있는 경우 매개 변수 표식 변수의 현재 값을 사용하여 준비된 문을 실행합니다.

구문

  
SQLRETURN SQLExecute(  
     SQLHSTMT     StatementHandle);  

인수

StatementHandle
[입력] 문 핸들입니다.

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, SQL_INVALID_HANDLE 또는 SQL_PARAM_DATA_AVAILABLE.

진단

SQLExecute가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 반환하는 경우 SQL_HANDLE_STMT HandleTypeHandle of StatementHandle을 사용하여 SQLGetDiagRec 를 호출하여 관련 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 SQLExecute에서 일반적으로 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각 값을 설명합니다. 표기법 "(DM)"은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 나와 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.

SQLSTATE 오류 설명
01000 일반 경고 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01001 커서 작업 충돌 StatementHandle연결된 준비된 문에는 위치가 지정된 업데이트 또는 삭제 문이 포함되어 있으며 행 또는 둘 이상의 행이 업데이트되거나 삭제되지 않았습니다. (둘 이상의 행에 대한 업데이트에 대한 자세한 내용은 SQL_ATTR_SIMULATE_CURSOR 설명 참조하세요.SQLSetStmtAttr의 특성입니다.)

함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01003 set 함수에서 NULL 값 제거 StatementHandle과 연결된 준비된 문에는 SET 함수(예: AVG, MAX, MIN 등)가 포함되어 있지만 COUNT 집합 함수는 포함되지 않았으며 함수가 적용되기 전에 NULL 인수 값이 제거되었습니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01004 문자열 데이터, 오른쪽 잘림 출력 매개 변수에 대해 반환된 문자열 또는 이진 데이터는 비블랭크 문자 또는 NULL이 아닌 이진 데이터의 잘림을 초래했습니다. 문자열 값인 경우 오른쪽에서 잘렸습니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01006 권한이 취소되지 않음 StatementHandle연결된 준비된 문은 REVOKE 문이며 사용자에게 지정된 권한이 없습니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01007 권한이 부여되지 않음 StatementHandle연결된 준비된 문은 GRANT 문이며 사용자에게 지정된 권한을 부여할 수 없습니다.
01S02 옵션 값이 변경됨 구현 작업 조건으로 인해 지정된 문 특성이 잘못되었으므로 비슷한 값이 일시적으로 대체되었습니다. (SQLGetStmtAttr을 호출하여 일시적으로 대체된 값이 무엇인지 확인할 수 있습니다.) 대체 값은 커서를 닫을 때까지 StatementHandle에 유효하며, 이때 문 특성은 이전 값으로 되돌리기. 변경할 수 있는 문 특성은 SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT 및 SQL_ATTR_SIMULATE_CURSOR. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01S07 분수 잘림 입력/출력 또는 출력 매개 변수에 대해 반환된 데이터는 숫자 데이터 형식의 소수 부분이 잘리거나 시간, 타임스탬프 또는 간격 데이터 형식의 시간 구성 요소의 소수 부분이 잘리도록 잘렸습니다.

함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
07002 COUNT 필드가 잘못되었습니다. SQLBindParameter지정된 매개 변수 수가 *StatementText에 포함된 SQL 문의 매개 변수 수보다 적습니다.

SQLBindParameter는 parameterValuePtr이 null 포인터로 설정되고 SQL_NULL_DATA또는 SQL_DATA_AT_EXEC 설정되지 StrLen_or_IndPtr, InputOutputType이 SQL_PARAM_OUTPUT 설정되지 않아 SQLBindParameter지정된 매개 변수 수가 *StatementText에 포함된 SQL 문의 매개 변수 수보다 큽니다.
07006 제한된 데이터 형식 특성 위반 바인딩된 매개 변수에 대한 SQLBindParameterValueType 인수로 식별된 데이터 값을 SQLBindParameterParameterType 인수로 식별된 데이터 형식으로 변환할 수 없습니다.

SQL_PARAM_INPUT_OUTPUT 또는 SQL_PARAM_OUTPUT 바인딩된 매개 변수에 대해 반환된 데이터 값을 SQLBindParameter의 ValueType 인수로 식별된 데이터 형식으로 변환할 수 없습니다.

하나 이상의 행에 대한 데이터 값을 변환할 수 없지만 하나 이상의 행이 성공적으로 반환된 경우 이 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
07007 제한된 매개 변수 값 위반 SQL_PARAM_INPUT_OUTPUT_STREAM 매개 변수 형식은 파트에서 데이터를 보내고 받는 매개 변수에만 사용됩니다. 이 매개 변수 형식에는 입력 바인딩된 버퍼가 허용되지 않습니다.

이 오류는 매개 변수 형식이 SQL_PARAM_INPUT_OUTPUT SQLBindParameter지정된 *StrLen_or_IndPtr SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len) 또는 SQL_DATA_AT_EXEC 같지 않은 경우에 발생합니다.
07S01 기본 매개 변수를 잘못 사용했습니다. SQLBindParameter설정된 매개 변수 값이 SQL_DEFAULT_PARAM ODBC 정식 프로시저 호출에 대한 매개 변수가 아니었습니다.
08S01 통신 링크 실패 드라이버와 드라이버가 연결된 데이터 원본 간의 통신 링크는 함수가 처리를 완료하기 전에 실패했습니다.
21S02 파생 테이블의 정도가 열 목록과 일치하지 않음 StatementHandle과 연결된 준비된 문에는 CREATE VIEW 문이 포함되어 있으며 정규화되지 않은 열 목록(SQL 문의 열 식별자 인수에서 뷰에 지정된 열 수)에는 SQL 문의 쿼리 사양 인수로 정의된 파생 테이블의 열 수보다 많은 이름이 포함되었습니다.
22001 문자열 데이터, 오른쪽 잘림 열에 문자 또는 이진 값을 할당하면 비블랭크(문자) 또는 null이 아닌(이진) 문자 또는 바이트가 잘리게 됩니다.
22002 표시기 변수가 필요하지만 제공되지 않음 NULL 데이터는 SQLBindParameter에서 설정한 StrLen_or_IndPtr null 포인터인 출력 매개 변수바인딩되었습니다.
22003 숫자 값이 범위를 벗어났습니다. StatementHandle연결된 준비된 문에는 바인딩된 숫자 매개 변수가 포함되어 있으며, 매개 변수 값으로 인해 연결된 테이블 열에 할당될 때 숫자의 전체 부분(분수가 아닌)이 잘렸습니다.

하나 이상의 입력/출력 또는 출력 매개 변수에 대해 숫자 값(숫자 또는 문자열)을 반환하면 숫자의 전체 부분(소수 부분이 아닌)이 잘렸을 것입니다.
22007 날짜/시간 형식이 잘못되었습니다. StatementHandle연결된 준비된 문에는 날짜, 시간 또는 타임스탬프 구조가 바인딩된 매개 변수로 포함된 SQL 문이 포함되어 있으며 매개 변수는 각각 잘못된 날짜, 시간 또는 타임스탬프였습니다.

입력/출력 또는 출력 매개 변수가 날짜, 시간 또는 타임스탬프 C 구조에 바인딩되었고 반환된 매개 변수의 값은 각각 잘못된 날짜, 시간 또는 타임스탬프였습니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
22008 날짜/시간 필드 오버플로 StatementHandle연결된 준비된 문에는 계산 시 날짜, 시간 또는 타임스탬프 구조가 유효하지 않은 날짜/시간 식이 포함된 SQL 문이 포함되어 있습니다.

입력/출력 또는 출력 매개 변수에 대해 계산된 datetime 식으로 인해 날짜, 시간 또는 타임스탬프 C 구조가 잘못되었습니다.
22012 0으로 나누기 StatementHandle연결된 준비된 문에는 나누기를 0으로 발생시킨 산술 식이 포함되어 있습니다.

입력/출력 또는 출력 매개 변수에 대해 계산된 산술 식으로 인해 나누기가 0으로 생성되었습니다.
22015 간격 필드 오버플로 *StatementText 에는 정확한 숫자 또는 간격 매개 변수가 포함되어 있습니다. 이 매개 변수는 간격 SQL 데이터 형식으로 변환될 때 상당한 자릿수의 손실을 초래했습니다.

*StatementText 에는 열의 숫자 데이터 형식으로 변환할 때 숫자 데이터 형식에 표현이 없는 둘 이상의 필드가 있는 간격 매개 변수가 포함되어 있습니다.

*StatementText 에는 간격 SQL 형식에 할당된 매개 변수 데이터가 포함되어 있으며 간격 SQL 형식에 C 형식의 값 표현이 없습니다.

정확한 숫자 또는 간격 SQL 형식인 입력/출력 또는 출력 매개 변수를 간격 C 형식에 할당하면 상당한 자릿수가 손실되었습니다.

입력/출력 또는 출력 매개 변수가 간격 C 구조에 할당된 경우 간격 데이터 구조에 데이터의 표현이 없었습니다.
22018 캐스트 사양에 잘못된 문자 값 *StatementText 에는 정확하거나 근사적인 숫자, 날짜/시간 또는 간격 데이터 형식인 C 형식이 포함되어 있습니다. 열의 SQL 형식은 문자 데이터 형식이고 열의 값은 바인딩된 C 형식의 유효한 리터럴이 아니었습니다.

입력/출력 또는 출력 매개 변수가 반환되었을 때 SQL 형식은 정확하거나 근사적인 숫자, 날짜/시간 또는 간격 데이터 형식이었습니다. C 형식이 SQL_C_CHAR; 열의 값이 바인딩된 SQL 형식의 유효한 리터럴이 아니었습니다.
22019 잘못된 이스케이프 문자 StatementHandle과 연결된 준비된 문에는 WHERE 절에 ESCAPE가 포함된 LIKE 조건자가 포함되어 있으며 ESCAPE 다음의 이스케이프 문자 길이는 1과 같지 않습니다.
22025 잘못된 이스케이프 시퀀스 StatementHandle과 연결된 준비된 문은 WHERE 절에 "LIKE패턴 값ESCAPE 이스케이프문자"를 포함했으며 패턴 값의 이스케이프 문자 다음에 있는 문자는 "%" 또는 "_" 중 하나가 아니었습니다.
23000 무결성 제약 조건 위반 StatementHandle연결된 준비된 문에 매개 변수가 포함되어 있습니다. 매개 변수 값은 연결된 테이블 열에서 NOT NULL로 정의된 열의 경우 NULL이거나, 고유 값만 포함하도록 제한된 열에 대해 중복 값이 제공되었거나, 다른 무결성 제약 조건이 위반되었습니다.
24000 커서 상태가 잘못되었습니다. SQLFetch 또는 SQLFetchScroll의해 StatementHandle커서가 배치되었습니다. 이 오류는 SQLFetch 또는 SQLFetchScroll이 SQL_NO_DATA 반환하지 않은 경우 드라이버 관리자가 반환하며, SQLFetch 또는 SQLFetchScroll이 SQL_NO_DATA 반환한 경우 드라이버에서 반환합니다.

StatementHandle에서 커서가 열렸습니다.

StatementHandle연결된 준비된 문에는 위치가 지정된 update 또는 delete 문이 포함되어 있으며 커서는 결과 집합이 시작되기 전이나 결과 집합의 끝 뒤에 배치되었습니다.
40001 Serialization 실패 다른 트랜잭션과의 리소스 교착 상태 때문에 트랜잭션이 롤백되었습니다.
40003 문 완성을 알 수 없음 이 함수를 실행하는 동안 연결된 연결이 실패했으며 트랜잭션 상태를 확인할 수 없습니다.
42000 구문 오류 또는 액세스 위반 사용자에게 StatementHandle과 연결된 준비된 문을 실행할 수 있는 권한이 없습니다.
44000 WITH CHECK OPTION 위반 StatementHandle연결된 준비된 문에는 INSERT 문의 영향을 받는 하나 이상의 행이 더 이상 보기 테이블에 존재하지 않도록 WITH CHECK OPTION을 지정하여 만든 뷰된 테이블에서 파생된 테이블 또는 뷰된 테이블에서 수행되는 INSERT 문이 포함되어 있습니다.

StatementHandle연결된 준비된 문에는 UPDATE 문의 영향을 받는 하나 이상의 행이 더 이상 보기 테이블에 존재하지 않도록 WITH CHECK OPTION을 지정하여 만든 뷰된 테이블에서 파생된 테이블 또는 뷰된 테이블에서 수행되는 UPDATE 문이 포함되어 있습니다.
HY000 일반 오류 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다.
HY001 메모리 할당 오류 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다.
HY008 작업이 취소됨 StatementHandle에 대해 비동기 처리를 사용하도록 설정했습니다. 함수가 호출되었고 실행이 완료되기 전에 StatementHandle에서 SQLCancel 또는 SQLCancelHandle호출되었습니다. 그런 다음 StatementHandle에서 함수가 다시 호출되었습니다.

함수가 호출되었고 실행을 완료하기 전에 다중 스레드 애플리케이션의 다른 스레드에서 StatementHandle에서 SQLCancel 또는 SQLCancelHandle이 호출되었습니다.
HY010 함수 시퀀스 오류 (DM) StatementHandle과 연결된 연결 핸들에 대해 비동기적으로 실행되는 함수가 호출되었습니다. 이 비동기 함수는 SQLExecute 함수가 호출되었을 때 계속 실행되었습니다.

(DM) SQLExecute, SQLExecDirect 또는 SQLMoreResults가 StatementHandle에 대해 호출되고 SQL_PARAM_DATA_AVAILABLE 반환되었습니다. 이 함수는 모든 스트리밍된 매개 변수에 대해 데이터를 검색하기 전에 호출되었습니다.

(DM) 이 함수가 아닌 비동기 실행 함수가 StatementHandle에 대해 호출되었고 이 함수가 호출되었을 때 계속 실행되고 있었습니다.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos가 StatementHandle에 대해 호출되고 SQL_NEED_DATA 반환되었습니다. 이 함수는 모든 실행 시 데이터 매개 변수 또는 열에 대한 데이터를 보내기 전에 호출되었습니다.

(DM) StatementHandle 이 준비되지 않았습니다.
HY013 메모리 관리 오류 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다.
HY090 잘못된 문자열 또는 버퍼 길이 SQLBindParameter설정된 매개 변수 값은 null 포인터였으며 매개 변수 길이 값은 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM 또는 SQL_LEN_DATA_AT_EXEC_OFFSET 보다 작거나 같지 않았습니다.

SQLBindParameter설정된 매개 변수 값은 null 포인터가 아니며, C 데이터 형식이 SQL_C_BINARY 또는 SQL_C_CHAR; 매개 변수 길이 값이 0보다 작지만 SQL_NTS, SQL_NULL_DATA, SQL_DEFAULT_PARAM 또는 SQL_DATA_AT_EXEC 또는 SQL_LEN_DATA_AT_EXEC_OFFSET 작거나 같지 않았습니다.

SQLBindParameter에 의해 바인딩된 매개 변수 길이 값이 SQL_DATA_AT_EXEC 설정되었습니다. SQL 형식은 SQL_LONGVARCHAR, SQL_LONGVARBINARY 또는 긴 데이터 원본별 데이터 형식이고 SQLGetInfo의 SQL_NEED_LONG_DATA_LEN 정보 형식은 "Y"였습니다.
HY105 잘못된 매개 변수 형식 SQLBindParameter의 InputOutputType 인수대해 지정된 값이 SQL_PARAM_OUTPUT 매개 변수가 입력 매개 변수였습니다.
HY109 커서 위치가 잘못되었습니다. 준비된 문은 배치된 업데이트 또는 삭제 문이었고 커서는 삭제되었거나 가져올 수 없는 행에 배치되었습니다(SQLSetPos 또는 SQLFetchScroll에 의해).
HY117 알 수 없는 트랜잭션 상태로 인해 커넥트ion이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요.
HYC00 선택적 기능이 구현되지 않음 SQL_ATTR_CONCURRENCY 및 SQL_ATTR_CURSOR_TYPE 문 특성의 현재 설정 조합은 드라이버 또는 데이터 원본에서 지원되지 않았습니다.

SQL_ATTR_USE_BOOKMARKS 문 특성이 SQL_UB_VARIABLE 설정되었으며 SQL_ATTR_CURSOR_TYPE 문 특성은 드라이버가 책갈피를 지원하지 않는 커서 유형으로 설정되었습니다.
HYT00 시간 제한 만료됨 데이터 원본이 결과 집합을 반환하기 전에 쿼리 제한 시간이 만료되었습니다. 시간 제한 기간은 SQL_ATTR_QUERY_TIMEOUT SQLSetStmtAttr를 통해 설정됩니다.
HYT01 연결 제한 시간이 만료됨 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQLSet커넥트Attr, SQL_ATTR_CONNECTION_TIMEOUT 통해 설정됩니다.
IM001 드라이버는 이 함수를 지원하지 않습니다. (DM) StatementHandle연결된 드라이버는 함수를 지원하지 않습니다.
IM017 비동기 알림 모드에서 폴링을 사용할 수 없습니다. 알림 모델을 사용할 때마다 폴링이 비활성화됩니다.
IM018 이 핸들에서 이전 비동기 작업을 완료하기 위해 SQLCompleteAsync 가 호출되지 않았습니다. 핸들의 이전 함수 호출이 SQL_STILL_EXECUTING 반환하고 알림 모드가 활성화된 경우 사후 처리를 수행하고 작업을 완료하려면 핸들에서 SQLCompleteAsync 를 호출해야 합니다.

SQLExecute는 데이터 원본이 문과 연결된 SQL 문을 평가하는 시기에 따라 SQLPrepare에서 반환할 수 있는 모든 SQLSTATE를 반환할 수 있습니다.

설명

SQLExecute는 SQLPrepare에서 준비한 문을 실행합니다. 애플리케이션이 SQLExecute 호출의 결과를 처리하거나 카드 후 애플리케이션은 새 매개 변수 값을 사용하여 SQLExecute를 다시 호출할 수 있습니다. 준비된 실행에 대한 자세한 내용은 준비된 실행을 참조하세요.

SELECT 문을 두 번 이상 실행하려면 애플리케이션이 SELECT 문을 다시 실행하기 전에 SQLCloseCursor호출해야 합니다.

데이터 원본이 수동 커밋 모드(명시적 트랜잭션 시작 필요)에 있고 트랜잭션이 아직 시작되지 않은 경우 드라이버는 SQL 문을 보내기 전에 트랜잭션을 시작합니다. 자세한 내용은 트랜잭션을 참조하세요.

애플리케이션에서 SQLPrepare를 사용하여 COMMIT 또는 ROLLBACK 문을 준비하고 SQLExecute를 제출 하는 경우 DBMS 제품 간에 상호 운용할 수 없습니다. 트랜잭션을 커밋하거나 롤백하려면 SQLEndTran을 호출합니다.

SQLExecute에서 실행 시 데이터 매개 변수가 발견되면 SQL_NEED_DATA 반환합니다. 애플리케이션은 SQLParamData 및 SQLPutData를 사용하여 데이터를 보냅니다. SQLBindParameter, SQLParamData, SQLPutData긴 데이터 보내기를 참조하세요.

SQLExecute가 데이터 원본의 행에 영향을 주지 않는 검색된 업데이트, 삽입 또는 삭제 문을 실행하는 경우 SQLExecute 호출은 SQL_NO_DATA 반환합니다.

SQL_ATTR_PARAMSET_SIZE 문 특성의 값이 1보다 크고 SQL 문에 매개 변수 표식이 하나 이상 있는 경우 SQLExecute는 SQLBindParameter 호출에서 *ParameterValuePtr 인수가 가리키는 배열의 각 매개 변수 값 집합에 대해 SQL 문을 한 번 실행합니다. 자세한 내용은 매개 변수 값 배열을 참조 하세요.

책갈피를 사용하도록 설정하고 책갈피를 지원할 수 없는 쿼리가 실행되면 드라이버는 특성 값을 변경하고 SQLSTATE 01S02(옵션 값 변경)를 반환하여 환경을 책갈피를 지원하는 환경으로 강제 변환하려고 시도해야 합니다. 특성을 변경할 수 없는 경우 드라이버는 SQLSTATE HY024(잘못된 특성 값)를 반환해야 합니다.

참고 항목

연결 풀링을 사용하는 경우 애플리케이션은 데이터 원본에서 사용하는 카탈로그를 변경하는 SQL Server의 USE데이터베이스 문과 같이 데이터베이스 또는 데이터베이스의 컨텍스트를 변경하는 SQL 문을 실행해서는 안 됩니다.

코드 예

SQLBindParameter, SQLBulkOperations, SQLPutDataSQLSetPos를 참조하세요.

추가 정보 참조
결과 집합의 열에 버퍼 바인딩 SQLBindCol 함수
문 처리 취소 SQLCancel 함수
커서 닫기 SQLCloseCursor 함수
커밋 또는 롤백 작업 실행 SQLEndTran 함수
SQL 문 실행 SQLExecDirect 함수
여러 행의 데이터 가져오기 SQLFetch 함수
데이터 블록을 가져오거나 결과 집합을 스크롤합니다. SQLFetchScroll 함수
문 핸들 해제 SQLFreeStmt 함수
커서 이름 반환 SQLGetCursorName 함수
데이터 열의 일부 또는 전체 가져오기 SQLGetData 함수
다음 매개 변수를 반환하여 에 대한 데이터를 보냅니다. SQLParamData 함수
실행을 위한 문 준비 SQLPrepare 함수
실행 시 매개 변수 데이터 보내기 SQLPutData 함수
커서 이름 설정 SQLSetCursorName 함수
문 특성 설정 SQLSetStmtAttr 함수

참고 항목

ODBC API 참조
ODBC 헤더 파일