Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Соответствие
Введенная версия: Соответствие стандартам 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.