Funzione SQLNativeSql
Conformità
Versione introdotta: Conformità agli standard ODBC 1.0: ODBC
Riepilogo
SQLNativeSql restituisce la stringa SQL modificata dal driver. SQLNativeSql non esegue l'istruzione SQL.
Sintassi
SQLRETURN SQLNativeSql(
SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
SQLINTEGER BufferLength,
SQLINTEGER * TextLength2Ptr);
Argomenti
ConnectionHandle
[Input] Handle di connessione.
InStatementText
[Input] Stringa di testo SQL da tradurre.
TextLength1
[Input] Lunghezza in caratteri della stringa di testo *InStatementText .
OutStatementText
[Output] Puntatore a un buffer in cui restituire la stringa SQL tradotta.
Se OutStatementText è NULL, TextLength2Ptr restituirà comunque il numero totale di caratteri (escluso il carattere di terminazione Null per i dati di tipo carattere) da restituire nel buffer a cui punta OutStatementText.
BufferLength
[Input] Numero di caratteri nel buffer *OutStatementText . Le versioni precedenti di questa documentazione implicano erroneamente che questo conteggio di caratteri deve essere anche se il valore restituito in *InStatementText è una stringa Unicode (quando si chiama SQLNativeSqlW). Non esiste alcuna restrizione di questo tipo. Per un'interoperabilità ottimale, i writer di driver devono aspettarsi che qualsiasi numero di caratteri venga passato a questa funzione, mentre i writer di applicazioni sono consigliati per usare sempre un conteggio pari.
TextLength2Ptr
[Output] Puntatore a un buffer in cui restituire il numero totale di caratteri (esclusa la terminazione Null) disponibile per la restituzione in *OutStatementText. Se il numero di caratteri disponibili per la restituzione è maggiore o uguale a BufferLength, la stringa SQL tradotta in *OutStatementText viene troncata in BufferLength meno la lunghezza di un carattere di terminazione Null.
Resi
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR o SQL_INVALID_HANDLE.
Diagnostica
Quando SQLNativeSql restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleTypedi SQL_HANDLE_DBC e handle di ConnectionHandle. La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLNativeSql e ne spiega ognuno nel contesto di questa funzione. La notazione "(DM)" precede le descrizioni di SQLSTATEs restituite da Gestione driver. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.
SQLSTATE | Errore | Descrizione |
---|---|---|
01000 | Avviso generale | Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
01004 | Dati stringa, troncati a destra | Il buffer *OutStatementText non è sufficientemente grande da restituire l'intera stringa SQL, quindi la stringa SQL è stata troncata. La lunghezza della stringa SQL non troncata viene restituita in *TextLength2Ptr. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
08003 | Connessione non aperta | ConnectionHandle non era in uno stato connesso. |
08S01 | Errore del collegamento di comunicazione | Collegamento di comunicazione tra il driver e l'origine dati a cui è stato connesso il driver non è riuscito prima del completamento dell'elaborazione della funzione. |
22007 | Formato datetime non valido | *InStatementText contiene una clausola di escape con un valore di data, ora o timestamp non valido. |
24000 | Stato del cursore non valido | Il cursore a cui si fa riferimento nell'istruzione è stato posizionato prima dell'inizio del set di risultati o dopo la fine del set di risultati. Questo errore potrebbe non essere restituito da un driver con un'implementazione nativa del cursore DBMS. |
HY000 | Errore generale: | Si è verificato un errore per il quale non è stato specificato SQLSTATE e per il quale non è stato definito alcun SQLSTATE specifico dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nel buffer *MessageText descrive l'errore e la relativa causa. |
HY001 | Errore di allocazione della memoria | Il driver non è riuscito ad allocare memoria necessaria per supportare l'esecuzione o il completamento della funzione. |
HY009 | Uso non valido del puntatore Null | (DM) *InStatementText era un puntatore Null. |
HY010 | Errore della sequenza di funzioni | (DM) È stata chiamata una funzione in esecuzione asincrona per ConnectionHandle ed era ancora in esecuzione quando questa funzione è stata chiamata. |
HY013 | Errore di gestione della memoria | Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente. |
HY090 | Lunghezza della stringa o del buffer non valida | (DM) L'argomento TextLength1 era minore di 0, ma non uguale a SQL_NTS. |
(DM) L'argomento BufferLength era minore di 0 e l'argomento OutStatementText non era un puntatore Null. | ||
HY109 | Posizione del cursore non valida | La riga corrente del cursore è stata eliminata o non è stata recuperata. Questo errore potrebbe non essere restituito da un driver con un'implementazione nativa del cursore DBMS. |
HY117 | La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. | (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran. |
HYT01 | Il timeout della connessione è scaduto | Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Il driver non supporta questa funzione | (DM) Il driver associato a ConnectionHandle non supporta la funzione. |
Commenti
Di seguito sono riportati esempi di ciò che SQLNativeSql potrebbe restituire per la stringa SQL di input seguente contenente la funzione scalare CONVERT. Si supponga che l'empid della colonna sia di tipo INTEGER nell'origine dati:
SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee
Un driver per Microsoft SQL Server potrebbe restituire la stringa SQL tradotta seguente:
SELECT convert (smallint, empid) FROM employee
Un driver per ORACLE Server potrebbe restituire la stringa SQL tradotta seguente:
SELECT to_number (empid) FROM employee
Un driver per in ingresso potrebbe restituire la stringa SQL tradotta seguente:
SELECT int2 (empid) FROM employee
Per altre informazioni, vedere Esecuzione diretta ed esecuzione preparata.
Funzioni correlate
Nessuno.