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
자세한 내용은 직접 실행 및 준비된 실행을 참조하세요.
관련 함수
없음