Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Powiązane funkcje
None.