SQLNativeSql, funkcja

Zgodność
Wprowadzona wersja: Zgodność ze standardami ODBC 1.0: ODBC

Podsumowanie
SQLNativeSQL zwraca ciąg SQL zmodyfikowany przez sterownik. SQLNativeSQL nie wykonuje instrukcji SQL.

Syntax

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

Arguments

ConnectionHandle
[Dane wejściowe] Uchwyt połączenia.

InStatementText
[Input] Ciąg tekstu SQL do tłumaczenia.

TekstDługość1
[Input] Długość w znakach ciągu tekstowego *InStatementText .

OutStatementText
[Wyjście] Wskaźnik do bufora, w którym zwraca przetłumaczony ciąg SQL.

Jeśli OutStatementText jest NULL, TextLength2Ptr nadal zwraca łączną liczbę znaków (z wyłączeniem znaku zakończenia zera dla danych znaków) dostępnych do zwrócenia w buforze wskazanym przez OutStatementText.

BufferLength
[Input] Liczba znaków w buforze *OutStatementText . Poprzednie wersje tej dokumentacji błędnie sugerowały, że ta liczba znaków musi być równa nawet jeśli wartość zwracana w *InStatementText jest ciągiem unikatowym (przy wywoływaniu SQLNativeSqlW). Nie ma takiego ograniczenia. Dla optymalnej interoperacyjności, twórcy sterowników powinni spodziewać się, że do tej funkcji zostanie przekazana dowolna liczba znaków, natomiast twórcom aplikacji zaleca się zawsze stosowanie liczby parzystych.

TextLength2Ptr
[Wyjście] Wskaźnik do bufora, w którym można zwrócić łączną liczbę znaków (z wyłączeniem zakończenia zerowego) dostępnych do zwrotu w *OutStatementText. Jeśli liczba znaków dostępnych do zwracania jest większa lub równa BufferLength, przetłumaczony ciąg SQL w *OutStatementText jest skracany do BufferLength minus długość znaku zakończenia zerowego.

Zwroty

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR lub SQL_INVALID_HANDLE.

Diagnostyka

Gdy SQLNativeSQL zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, można uzyskać powiązaną wartość SQLSTATE, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_DBC oraz HandlemConnectionHandle. Poniższa tabela przedstawia wartości SQLSTATE najczęściej zwracane przez SQLNativeSQL i wyjaśnia każdą z nich w kontekście tej funkcji; notacja "(DM)" poprzedza opisy stanów SQL zwracanych przez Menedżera Sterowników. Kod zwracany skojarzony z każdą wartością SQLSTATE jest SQL_ERROR, chyba że określono inaczej.

SQLSTATE Error Opis
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
01004 Dane ciągów, prawe obcięte Bufor *OutStatementText nie był wystarczająco duży, by zwrócić cały ciąg SQL, więc ciąg SQL został obcięty. Długość nieobciętego ciągu SQL jest zwracana w *TextLength2Ptr. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
08003 Połączenie nie jest otwarte ConnectionHandle nie był w stanie połączonym.
08S01 Błąd połączenia komunikacyjnego Połączenie komunikacyjne między sterownikiem a źródłem danych, z którym sterownik został połączony, nie powiodło się przed zakończeniem przetwarzania funkcji.
22007 Nieprawidłowy format daty/godziny * InStatementText zawierał klauzulę wyjścia z nieprawidłową wartością daty, godziny lub znacznika czasu.
24000 Nieprawidłowy stan kursora Kursor wspomniany w instrukcji był umieszczony przed początkiem zbioru wyników lub po jego końcu. Ten błąd może nie być zwrócony przez sterownik posiadający natywną implementację kursora DBMS.
HY000 Błąd ogólny Wystąpił błąd, dla którego nie było określonego stanu SQLSTATE i dla którego nie zdefiniowano parametru SQLSTATE specyficznego dla implementacji. Komunikat o błędzie zwrócony przez element SQLGetDiagRec w buforze *MessageText opisuje błąd i jego przyczynę.
HY001 Błąd alokacji pamięci Sterownik nie może przydzielić pamięci wymaganej do obsługi wykonywania lub ukończenia funkcji.
HY009 Nieprawidłowe użycie wskaźnika o wartości null (DM) *InStatementText był wskaźnikiem zerowym.
HY010 Błąd sekwencji funkcji (DM) Funkcja wykonująca asynchronicznie została wywołana dla ConnectionHandle i nadal działała, gdy ta funkcja została wywołana.
HY013 Błąd zarządzania pamięcią Nie można przetworzyć wywołania funkcji, ponieważ nie można uzyskać dostępu do bazowych obiektów pamięci, prawdopodobnie z powodu niskich warunków pamięci.
HY090 Nieprawidłowa długość ciągu lub buforu (DM) Argument TextLength1 był mniejszy niż 0, ale nie równy SQL_NTS.
(DM) Argument BufferLength był mniejszy niż 0, a argument OutStatementText nie był wskaźnikiem zerowym.
HY109 Nieprawidłowa pozycja kursora Obecny wiersz kursora został usunięty lub nie został pobrany. Ten błąd może nie być zwrócony przez sterownik posiadający natywną implementację kursora DBMS.
HY117 Połączenie jest zawieszone z powodu nieznanego stanu transakcji. Dozwolone są tylko funkcje rozłączania i tylko do odczytu. (DM) Aby uzyskać więcej informacji na temat stanu wstrzymania, zobacz SQLEndTran, funkcja.
HYT01 Upłynął limit czasu połączenia Okres przekroczenia limitu czasu połączenia wygasł, zanim źródło danych odpowiedziało na żądanie. Limit czasu połączenia jest ustawiany za pomocą parametru SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Sterownik nie obsługuje tej funkcji (DM) Sterownik powiązany z ConnectionHandle nie obsługuje tej funkcji.

Comments

Poniżej przedstawiono przykłady tego, co SQLNativeSQL może zwrócić dla następującego ciągu wejściowego SQL zawierającego funkcję skalarną CONVERT. Załóżmy, że kolumna empid ma w źródle danych typ INTEGER:

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

Sterownik dla Microsoft SQL Server może zwracać następujący przetłumaczony ciąg SQL:

SELECT convert (smallint, empid) FROM employee  

Sterownik dla ORACLE Server może zwracać następujący przetłumaczony ciąg SQL:

SELECT to_number (empid) FROM employee  

Sterownik dla Ingres może zwracać następujący przetłumaczony ciąg SQL:

SELECT int2 (empid) FROM employee  

Więcej informacji można znaleźć w sekcji Bezpośrednie wykonanie i Przygotowane wykonanie.

None.