다음을 통해 공유


SQLNativeSql 함수

규칙
도입된 버전: ODBC 1.0 표준 준수: ODBC

요약
SQLNativeSql은 드라이버에서 수정한 대로 SQL 문자열을 반환합니다. SQLNativeSql 은 SQL 문을 실행하지 않습니다.

구문

  
SQLRETURN SQLNativeSql(  
     SQLHDBC        ConnectionHandle,  
     SQLCHAR *      InStatementText,  
     SQLINTEGER     TextLength1,  
     SQLCHAR *      OutStatementText,  
     SQLINTEGER     BufferLength,  
     SQLINTEGER *   TextLength2Ptr);  

인수

ConnectionHandle
[Input] 연결 핸들입니다.

InStatementText
[입력] 번역할 SQL 텍스트 문자열입니다.

TextLength1
[입력] *InStatementText 텍스트 문자열의 문자 길이입니다.

OutStatementText
[출력] 번역된 SQL 문자열을 반환할 버퍼에 대한 포인터입니다.

OutStatementText가 NULL인 경우 TextLength2Ptr는 OutStatementText가 가리키는 버퍼에서 반환할 수 있는 총 문자 수(문자 데이터의 null 종료 문자 제외)를 계속 반환합니다.

BufferLength
[입력] *OutStatementText 버퍼의 문자 수입니다. 이 설명서의 이전 버전에서는 *InStatementText에서 반환된 값이 유니코드 문자열(SQLNativeSqlW를 호출할 때)인 경우에도 이 문자 수가 있어야 한다는 것을 실수로 암시했습니다. 이러한 제한은 없습니다. 최적의 상호 운용성을 위해 드라이버 작성기는 이 함수에 전달될 문자 수를 예상해야 하며, 애플리케이션 작성기는 항상 짝수 수를 사용하는 것이 좋습니다.

TextLength2Ptr
[출력] *OutStatementText에서 반환할 수 있는 총 문자 수(null 종료 제외)를 반환할 버퍼에 대한 포인터입니다. 반환할 수 있는 문자 수가 BufferLength보다 크거나 같으면 *OutStatementText의 번역된 SQL 문자열이 BufferLength에서 null 종료 문자의 길이를 뺀 값으로 잘립니다.

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR 또는 SQL_INVALID_HANDLE.

진단

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

SQLSTATE Error 설명
01000 일반 경고 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01004 문자열 데이터, 오른쪽 잘림 버퍼 *OutStatementText 가 전체 SQL 문자열을 반환할 만큼 크지 않으므로 SQL 문자열이 잘렸습니다. 신뢰할 수 없는 SQL 문자열의 길이는 *TextLength2Ptr에서 반환됩니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
08003 연결이 열리지 않음 ConnectionHandle이 연결된 상태가 아닙니다.
08S01 통신 링크 실패 드라이버와 드라이버가 연결된 데이터 원본 간의 통신 링크는 함수가 처리를 완료하기 전에 실패했습니다.
22007 날짜/시간 형식이 잘못되었습니다. *InStatementText 에는 잘못된 날짜, 시간 또는 타임스탬프 값이 있는 이스케이프 절이 포함되어 있습니다.
24000 커서 상태가 잘못되었습니다. 문에서 참조되는 커서는 결과 집합이 시작되기 전이나 결과 집합의 끝 뒤에 배치되었습니다. 이 오류는 네이티브 DBMS 커서 구현이 있는 드라이버에서 반환할 수 없습니다.
HY000 일반 오류 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다.
HY001 메모리 할당 오류 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다.
HY009 null 포인터를 잘못 사용했습니다. (DM) *InStatementText 가 null 포인터였습니다.
HY010 함수 시퀀스 오류 (DM) ConnectionHandle에 대해 비동기적으로 실행되는 함수가 호출되었고 이 함수가 호출되었을 때 계속 실행되고 있었습니다.
HY013 메모리 관리 오류 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다.
HY090 잘못된 문자열 또는 버퍼 길이 (DM) TextLength1 인수가 0보다 작지만 SQL_NTS 같지 않습니다.
(DM) BufferLength 인수가 0보다 작고 OutStatementText 인수가 null 포인터가 아닙니다.
HY109 커서 위치가 잘못되었습니다. 커서의 현재 행이 삭제되었거나 가져오지 않았습니다. 이 오류는 네이티브 DBMS 커서 구현이 있는 드라이버에서 반환할 수 없습니다.
HY117 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요.
HYT01 연결 제한 시간이 만료됨 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다.
IM001 드라이버는 이 함수를 지원하지 않습니다. (DM) ConnectionHandle연결된 드라이버는 함수를 지원하지 않습니다.

주석

다음은 스칼라 함수 CONVERT를 포함하는 다음 입력 SQL 문자열에 대해 SQLNativeSql 이 반환할 수 있는 예제입니다. 열 empid가 데이터 원본의 INTEGER 형식이라고 가정합니다.

SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee  

Microsoft SQL Server용 드라이버는 다음과 같은 번역된 SQL 문자열을 반환할 수 있습니다.

SELECT convert (smallint, empid) FROM employee  

ORACLE Server용 드라이버는 다음과 같이 번역된 SQL 문자열을 반환할 수 있습니다.

SELECT to_number (empid) FROM employee  

Ingres용 드라이버는 다음과 같이 번역된 SQL 문자열을 반환할 수 있습니다.

SELECT int2 (empid) FROM employee  

자세한 내용은 직접 실행 및 준비된 실행을 참조하세요.

없음

참고 항목

ODBC API 참조
ODBC 헤더 파일