Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Соответствие
Введенная версия: Соответствие стандартам ODBC 1.0: ODBC
Сводка
SQLNativeSQL возвращает SQL-строку, изменённую драйвером.
SQLNativeSQL не выполняет SQL-оператор.
Syntax
SQLRETURN SQLNativeSql(
SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
SQLINTEGER BufferLength,
SQLINTEGER * TextLength2Ptr);
Arguments
ConnectionHandle
[Input] Дескриптор подключения
InStatementText
[Ввод] SQL-текстовая строка для перевода.
Длина текста1
[Ввод] Длина в символах строки текста *InStatementText .
OutStatementText
[Выход] Указатель на буфер для возврата переведённой SQL-строки.
Если OutStatementText — NULL, TextLength2Ptr всё равно вернёт общее количество символов (за исключением символа null-termination для данных символов), доступных для возврата в буфере, на который указывает OutStatementText.
BufferLength
[Ввод] Количество символов в буфере *OutStatementText . В прошлых версиях этой документации ошибочно предполагалось, что такое количество символов должно быть даже если значение, возвращаемое в *InStatementText , является строкой Unicode (при вызове SQLNativeSqlW). Такого ограничения нет. Для оптимальной совместимости драйверы должны ожидать, что в эту функцию будет передаваться любое количество символов, тогда как для приложений рекомендуется всегда использовать чётное число.
ТекстДлина2Ptr
[Выход] Указатель на буфер, в котором можно вернуть общее количество символов (без учёта нулевой терминации), доступных для возврата в *OutStatementText. Если количество доступных для возврата символов больше или равно BufferLength, переводная SQL-строка в *OutStatementText усекается до BufferLength минус длина символа null-termination.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR или SQL_INVALID_HANDLE.
Diagnostics
Когда SQLNativeSQL возвращает либо SQL_ERROR, либо SQL_SUCCESS_WITH_INFO, соответствующее значение SQLSTATE можно получить, вызвав SQLGetDiagRec с помощью HandleType SQL_HANDLE_DBC и HandleType of ConnectionHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращает SQLNativeSql , и каждое из них объясняется в контексте этой функции; обозначение «(DM)» предшествует описаниям SQLSTATE, возвращаемым менеджером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Общее предупреждение | Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.) |
| 01004 | Строковые данные, усеченные справа | Буфер *OutStatementText был недостаточно велик, чтобы вернуть всю SQL-строку, поэтому строка SQL была усечена. Длина неусечённой SQL-строки возвращается в *TextLength2Ptr. (Функция возвращает SQL_SUCCESS_WITH_INFO.) |
| 08003 | Подключение не открыто | ConnectionHandle не находился в связанном состоянии. |
| 08S01 | Сбой связи | Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции. |
| 22007 | Недопустимый формат datetime | * InStatementText содержал escape-клаузу с недействительными значениями даты, времени или временной метки. |
| 24000 | Недопустимое состояние курсора | Курсор, указанный в операторе, располагался до начала результатного набора или после его окончания. Эта ошибка может не быть возвращена драйвером с нативной реализацией курсора СУБД. |
| HY000 | Общая ошибка | Произошла ошибка, для которой не было определенного SQLSTATE и для которого не было определено значение SQLSTATE для конкретной реализации. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину. |
| HY001 | Ошибка выделения памяти | Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции. |
| HY009 | Недопустимое использование указателя NULL | (DM) *InStatementText был null pointer. |
| HY010 | Ошибка последовательности функций | (DM) Для ConnectionHandle была вызвана асинхронно выполняющаяся функция, которая всё ещё выполнялась, когда эта функция была вызвана. |
| HY013 | Ошибка управления памятью | Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти. |
| HY090 | Недопустимая длина строки или буфера | (DM) Аргумент TextLength1 был меньше 0, но не равен SQL_NTS. |
| (DM) Аргумент BufferLength был меньше 0, а аргумент OutStatementText не был нулевой указателем. | ||
| HY109 | Недопустимое положение курсора | Текущая строка курсора была удалена или не была заброшена. Эта ошибка может не быть возвращена драйвером с нативной реализацией курсора СУБД. |
| HY117 | Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. | (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function. |
| HYT01 | Время ожидания для подключения истекло | Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Драйвер не поддерживает эту функцию | (DM) Драйвер, связанный с ConnectionHandle , не поддерживает эту функцию. |
Comments
Ниже приведены примеры того, что SQLNativeSQL может вернуть для следующей входной SQL-строки, содержащей скалярную функцию CONVERT. Предположим, что столбец 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
Для получения дополнительной информации см. разделы «Прямое исполнение » и «Подготовленное исполнение».
Связанные функции
None.