준수
도입 버전: ODBC 1.0 표준 준수: ODBC
Summary
SQLNativeSQL 은 드라이버에 의해 수정된 SQL 문자열을 반환합니다.
SQLNativeSQL 은 SQL 문장을 실행하지 않습니다.
Syntax
SQLRETURN SQLNativeSql(
SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
SQLINTEGER BufferLength,
SQLINTEGER * TextLength2Ptr);
Arguments
ConnectionHandle
[Input] 연결 핸들입니다.
입장서 본문
[입력] 번역할 SQL 텍스트 문자열.
텍스트 길이1
[입력] *InStatementText 텍스트 문자열의 문자 길이.
아웃 진술문
[출력] 변환된 SQL 문자열을 반환할 버퍼를 포인터로 표시합니다.
OutStatementText가 NULL이라면, TextLength2Ptr은 OutStatementText가 가리키는 버퍼에서 반환 가능한 총 문자 수를 반환합니다(문자 데이터의 null-종료 문자 제외).
BufferLength
[입력] *OutStatementText 버퍼의 문자 수. 이전 버전의 이 문서들은 * InStatementText 에서 반환되는 값이 유니코드 문자열( SQLNativeSqlW를 호출할 때)일 때도 이 문자 수가 짝이어야 한다고 잘못 암시했습니다. 그런 제한은 없습니다. 최적의 상호운용성을 위해 드라이버 작성자는 이 함수에 전달되는 문자 수를 예상해야 하며, 애플리케이션 작성자는 항상 짝수 수를 사용하는 것이 권장됩니다.
텍스트 길이 2장
[출력] *OutStatementText에서 반환할 수 있는 총 문자 수(null-termination을 제외)를 반환할 수 있는 버퍼를 포인터합니다. 반환할 수 있는 문자 수가 BufferLength보다 크면, *OutStatementText 의 번역된 SQL 문자열은 BufferLength 에서 널 종료 문자의 길이를 뺀 값으로 잘립니다.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR 또는 SQL_INVALID_HANDLE.
진단
SQLNativeSQL이 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO을 반환할 때, HandleType을 SQL_HANDLE_DBC, Handle을 ConnectionHandle으로 사용하여 SQLGetDiagRec을 호출하여 관련 SQLSTATE 값을 얻을 수 있습니다. 다음 표는 SQLNativeSQL 이 일반적으로 반환하는 SQLSTATE 값을 나열하며, 각 값이 이 함수의 맥락에서 설명됩니다; 드라이버 매니저가 반환하는 SQLSTATE 설명 앞에 "(DM)"이라는 표기가 붙습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.
| SQLSTATE | 오류 | Description |
|---|---|---|
| 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 는 널 포인터였습니다. |
| HY010 | 함수 시퀀스 오류 | (DM) ConnectionHandle 에 대해 비동기적으로 실행 중인 함수가 호출되었고, 이 함수가 호출될 때도 실행 중이었습니다. |
| HY013 | 메모리 관리 오류 | 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다. |
| HY090 | 잘못된 문자열 또는 버퍼 길이 | (DM) 인수 TextLength1 은 0보다 작았지만 SQL_NTS와 같지는 않았다. |
| (DM) BufferLength 인수가 0보다 작았고, OutStatementText 인자는 널 포인터가 아니었습니다. | ||
| HY109 | 커서 위치가 잘못되었습니다. | 현재 커서의 행은 삭제되었거나 가져오지 않았다. 이 오류는 네이티브 DBMS 커서 구현을 가진 드라이버에서는 반환되지 않을 수 있습니다. |
| HY117 | 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. | (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요. |
| HYT01 | 연결 제한 시간이 만료됨 | 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다. |
| IM001 | 드라이버는 이 함수를 지원하지 않습니다. | (DM) ConnectionHandle 에 연관된 드라이버는 해당 기능을 지원하지 않습니다. |
코멘트
다음은 CONVERT 스칼라 함수를 포함한 입력 SQL 문자열에 대해 SQLNativeSQL 이 반환할 수 있는 예시입니다. 데이터 소스에서 EMID 열이 INTEGER 타입이라고 가정하자:
SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee
Microsoft SQL Server용 드라이버는 다음과 같은 변환된 SQL 문자열을 반환할 수 있습니다:
SELECT convert (smallint, empid) FROM employee
ORACLE 서버용 드라이버는 다음과 같은 변환된 SQL 문자열을 반환할 수 있습니다:
SELECT to_number (empid) FROM employee
Ingres 드라이버는 다음과 같은 변환된 SQL 문자열을 반환할 수 있습니다:
SELECT int2 (empid) FROM employee
자세한 내용은 직접 실행(Direct Execution )과 준비된 실행(Prepared Execution)을 참조하세요.
관련 함수
None.