Funzione SQLGetTypeInfo

Conformità
Versione introdotta: Conformità agli standard ODBC 1.0: ISO 92

Riepilogo
SQLGetTypeInfo restituisce informazioni sui tipi di dati supportati dall'origine dati. Il driver restituisce le informazioni sotto forma di set di risultati SQL. I tipi di dati sono destinati all'uso nelle istruzioni DDL (Data Definition Language).

Importante

Le applicazioni devono usare i nomi dei tipi restituiti nella colonna TYPE_NAME del set di risultati SQLGetTypeInfo nelle istruzioni ALTER TABLE e CREATE TABLE . SQLGetTypeInfo può restituire più righe con lo stesso valore nella colonna DATA_TYPE.

Sintassi

  
SQLRETURN SQLGetTypeInfo(  
     SQLHSTMT      StatementHandle,  
     SQLSMALLINT   DataType);  

Argomenti

StatementHandle
[Input] Handle di istruzione per il set di risultati.

DataType
[Input] Tipo di dati SQL. Deve essere uno dei valori nella sezione Tipi di dati SQL dell'Appendice D: Tipi di dati o un tipo di dati SQL specifico del driver. SQL_ALL_TYPES specifica che devono essere restituite informazioni su tutti i tipi di dati.

Resi

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnostica

Quando SQLGetTypeInfo restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleTypedi SQL_HANDLE_STMT e handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLGetTypeInfo 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.
01S02 Valore dell'opzione modificato Un attributo di istruzione specificato non è valido a causa delle condizioni di lavoro dell'implementazione, pertanto è stato sostituito temporaneamente un valore simile. (Chiamata) SQLGetStmtAttr per determinare il valore sostituito temporaneamente. Il valore sostitutivo è valido per StatementHandle fino alla chiusura del cursore. Gli attributi dell'istruzione che possono essere modificati sono: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT e SQL_ATTR_SIMULATE_CURSOR. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
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.
24000 Stato del cursore non valido È stato aperto un cursore in StatementHandle e è stato chiamato SQLFetch o SQLFetchScroll . Questo errore viene restituito da Gestione driver se SQLFetch o SQLFetchScroll non ha restituito SQL_NO_DATA e viene restituito dal driver se SQLFetch o SQLFetchScroll ha restituito SQL_NO_DATA.

Un set di risultati è stato aperto in StatementHandle, ma SQLFetch o SQLFetchScroll non è stato chiamato.
40001 Errore di serializzazione È stato eseguito il rollback della transazione a causa di un deadlock della risorsa con un'altra transazione.
40003 Completamento istruzione sconosciuto Impossibile determinare la connessione associata durante l'esecuzione di questa funzione e lo stato della transazione.
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.
HY004 Tipo di dati SQL non valido Il valore specificato per l'argomento DataType non era né un identificatore di tipo di dati ODBC SQL valido né un identificatore del tipo di dati specifico del driver supportato dal driver.
HY008 Operazione annullata L'elaborazione asincrona è stata abilitata per StatementHandle, quindi è stata chiamata la funzione e, prima del completamento dell'esecuzione, SQLCancel o SQLCancelHandle è stata chiamata in StatementHandle. La funzione è stata quindi chiamata di nuovo in StatementHandle.

La funzione è stata chiamata e, prima di completare l'esecuzione, SQLCancel o SQLCancelHandle è stata chiamata su StatementHandle da un thread diverso in un'applicazione multithread.
HY010 Errore della sequenza di funzioni (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a StatementHandle. Questa funzione asincrona era ancora in esecuzione quando è stata chiamata la funzione SQLGetTypeInfo .

(DM) SQLExecute, SQLExecDirect o SQLMoreResults è stato chiamato per StatementHandle e restituito SQL_PARAM_DATA_AVAILABLE. Questa funzione è stata chiamata prima del recupero dei dati per tutti i parametri trasmessi.

(DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per StatementHandle ed è ancora in esecuzione quando questa funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per StatementHandle e restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution.
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.
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.
HYC00 Funzionalità facoltativa non implementata La combinazione delle impostazioni correnti degli attributi delle istruzioni SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE non è supportata dal driver o dall'origine dati.

L'attributo di istruzione SQL_ATTR_USE_BOOKMARKS è stato impostato su SQL_UB_VARIABLE e l'attributo dell'istruzione SQL_ATTR_CURSOR_TYPE è stato impostato su un tipo di cursore per cui il driver non supporta i segnalibri.
HYT00 Timeout scaduto Periodo di timeout della query scaduto prima che l'origine dati restituisca il set di risultati. Il periodo di timeout viene impostato tramite SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
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 corrispondente a StatementHandle non supporta la funzione.
IM017 Il polling è disabilitato in modalità di notifica asincrona Ogni volta che viene usato il modello di notifica, il polling è disabilitato.
IM018 SQLCompleteAsync non è stato chiamato per completare l'operazione asincrona precedente su questo handle. Se la chiamata di funzione precedente sull'handle restituisce SQL_STILL_EXECUTING e se la modalità di notifica è abilitata, è necessario chiamare SQLCompleteAsync sull'handle per eseguire la post-elaborazione e completare l'operazione.

Commenti

SQLGetTypeInfo restituisce i risultati come set di risultati standard, ordinati per DATA_TYPE e quindi in base alla precisione con cui il tipo di dati viene mappato al tipo di dati SQL ODBC corrispondente. I tipi di dati definiti dall'origine dati hanno la precedenza sui tipi di dati definiti dall'utente. Di conseguenza, l'ordinamento non è necessariamente coerente, ma può essere generalizzato come DATA_TYPE prima, seguito da TYPE_NAME, entrambi crescente. Si supponga, ad esempio, che un'origine dati abbia definito tipi di dati INTEGER e COUNTER, in cui COUNTER venga incrementato automaticamente e che sia stato definito anche un tipo di dati WHOLENUM definito dall'utente. Questi valori vengono restituiti nell'ordine INTEGER, WHOLENUM e COUNTER, perché WHOLENUM esegue il mapping strettamente al tipo di dati ODBC SQL SQL_INTEGER, mentre il tipo di dati a incremento automatico, anche se supportato dall'origine dati, non esegue il mapping a un tipo di dati SQL ODBC. Per informazioni sull'uso di queste informazioni, vedere Istruzioni DDL.

Se l'argomento DataType specifica un tipo di dati valido per la versione di ODBC supportata dal driver, ma non è supportato dal driver, restituirà un set di risultati vuoto.

Nota

Per altre informazioni sull'utilizzo generale, gli argomenti e i dati restituiti delle funzioni del catalogo ODBC, vedere Funzioni del catalogo.

Le colonne seguenti sono state rinominate per ODBC 3.x. Le modifiche apportate al nome della colonna non influiscono sulla compatibilità con le versioni precedenti perché le applicazioni si associano per numero di colonna.

Colonna ODBC 2.0 ODBC 3.x colonna
PRECISION COLUMN_SIZE
MONEY FIXED_PREC_SCALE
AUTO_INCREMENT AUTO_UNIQUE_VALUE

Le colonne seguenti sono state aggiunte al set di risultati restituito da SQLGetTypeInfo per ODBC 3.x:

  • SQL_DATA_TYPE

  • INTERVAL_PRECISION

  • SQL_DATETIME_SUB

  • NUM_PREC_RADIX

Nella tabella seguente sono elencate le colonne nel set di risultati. Le colonne aggiuntive successive alla colonna 19 (INTERVAL_PRECISION) possono essere definite dal driver. Un'applicazione deve ottenere l'accesso alle colonne specifiche del driver con il conteggio dalla fine del set di risultati anziché specificare una posizione ordinale esplicita. Per altre informazioni, vedere Dati restituiti dalle funzioni del catalogo.

Nota

SQLGetTypeInfo potrebbe non restituire tutti i tipi di dati. Ad esempio, un driver potrebbe non restituire tipi di dati definiti dall'utente. Le applicazioni possono usare qualsiasi tipo di dati valido, indipendentemente dal fatto che venga restituito da SQLGetTypeInfo. I tipi di dati restituiti da SQLGetTypeInfo sono quelli supportati dall'origine dati. Sono destinati all'uso nelle istruzioni DDL (Data Definition Language). I driver possono restituire dati del set di risultati usando tipi di dati diversi dai tipi restituiti da SQLGetTypeInfo. Nella creazione del set di risultati per una funzione del catalogo, il driver potrebbe usare un tipo di dati non supportato dall'origine dati.

Nome colonna Column

number
Tipo di dati Commenti
TYPE_NAME (ODBC 2.0) 1 Varchar non NULL Nome del tipo di dati dipendente dall'origine dati; Ad esempio, "CHAR()", "VARCHAR()", "MONEY", "LONG VARBINARY" o "CHAR ( ) FOR BIT DATA". Le applicazioni devono usare questo nome nelle istruzioni CREATE TABLE e ALTER TABLE .
DATA_TYPE (ODBC 2.0) 2 Smallint non NULL Tipo di dati SQL. Può trattarsi di un tipo di dati SQL ODBC o di un tipo di dati SQL specifico del driver. Per i tipi di dati datetime o interval, questa colonna restituisce il tipo di dati conciso, ad esempio SQL_TYPE_TIME o SQL_INTERVAL_YEAR_TO_MONTH. Per un elenco dei tipi di dati SQL ODBC validi, vedere Tipi di dati SQL nell'Appendice D: Tipi di dati. Per informazioni sui tipi di dati SQL specifici del driver, vedere la documentazione del driver.
COLUMN_SIZE (ODBC 2.0) 3 Integer Dimensione massima della colonna supportata dal server per questo tipo di dati. Per i dati numerici, si tratta della precisione massima. Per i dati stringa, si tratta della lunghezza in caratteri. Per i tipi di dati datetime, si tratta della lunghezza in caratteri della rappresentazione di stringa (presupponendo la precisione massima consentita del componente secondi frazionari). Viene restituito NULL per i tipi di dati in cui le dimensioni della colonna non sono applicabili. Per i tipi di dati interval, si tratta del numero di caratteri nella rappresentazione di caratteri del valore letterale intervallo (come definito dalla precisione iniziale dell'intervallo. Vedere Intervallo lunghezza del tipo di dati nell'Appendice D: Tipi di dati).

Per altre informazioni sulle dimensioni delle colonne, vedere Dimensioni delle colonne, Cifre decimali, Lunghezza ottetto di trasferimento e Dimensioni di visualizzazione nell'Appendice D: Tipi di dati.
LITERAL_PREFIX (ODBC 2.0) 4 Varchar Carattere o caratteri usati per anteporre un valore letterale; ad esempio una virgoletta singola (') per i tipi di dati di tipo carattere o 0x per i tipi di dati binari; Viene restituito NULL per i tipi di dati in cui un prefisso letterale non è applicabile.
LITERAL_SUFFIX (ODBC 2.0) 5 Varchar Carattere o caratteri utilizzati per terminare un valore letterale; ad esempio una virgoletta singola (') per i tipi di dati di tipo carattere; Viene restituito NULL per i tipi di dati in cui non è applicabile un suffisso letterale.
CREATE_PARAMS (ODBC 2.0) 6 Varchar Elenco di parole chiave, separate da virgole, corrispondenti a ogni parametro che l'applicazione può specificare tra parentesi quando si usa il nome restituito nel campo TYPE_NAME. Le parole chiave nell'elenco possono essere una delle seguenti: lunghezza, precisione o scala. Vengono visualizzati nell'ordine in cui la sintassi richiede l'uso. Ad esempio, CREATE_PARAMS per DECIMAL sarebbe "precisione, scala"; CREATE_PARAMS per VARCHAR sarebbe uguale a "length". Null viene restituito se non sono presenti parametri per la definizione del tipo di dati; ad esempio INTEGER.

Il driver fornisce il testo CREATE_PARAMS nella lingua del paese/area geografica in cui viene utilizzato.
NULLABLE (ODBC 2.0) 7 Smallint non NULL Indica se il tipo di dati accetta un valore NULL:

SQL_NO_NULLS se il tipo di dati non accetta valori NULL.

SQL_NULLABLE se il tipo di dati accetta valori NULL.

SQL_NULLABLE_UNKNOWN se non è noto se la colonna accetta valori NULL.
CASE_SENSITIVE (ODBC 2.0) 8 Smallint non NULL Indica se un tipo di dati di tipo carattere fa distinzione tra maiuscole e minuscole nelle regole di confronto e nei confronti:

SQL_TRUE se il tipo di dati è di tipo carattere e fa distinzione tra maiuscole e minuscole.

SQL_FALSE se il tipo di dati non è un tipo di dati carattere o non fa distinzione tra maiuscole e minuscole.
SEARCHABLE (ODBC 2.0) 9 Smallint non NULL Modalità di utilizzo del tipo di dati in una clausola WHERE :

SQL_PRED_NONE se la colonna non può essere utilizzata in una clausola WHERE . Corrisponde al valore SQL_UNSEARCHABLE in ODBC 2.x.)

SQL_PRED_CHAR se la colonna può essere usata in una clausola WHERE , ma solo con il predicato LIKE . Corrisponde al valore SQL_LIKE_ONLY in ODBC 2.x.)

SQL_PRED_BASIC se la colonna può essere usata in una clausola WHERE con tutti gli operatori di confronto tranne LIKE (confronto, confronto quantificato, BETWEEN, DISTINCT, IN, MATCH e UNIQUE). Corrisponde al valore SQL_ALL_EXCEPT_LIKE in ODBC 2.x.)

SQL_SEARCHABLE se la colonna può essere usata in una clausola WHERE con qualsiasi operatore di confronto.
UNSIGNED_ATTRIBUTE (ODBC 2.0) 10 Smallint Indica se il tipo di dati non è firmato:

SQL_TRUE se il tipo di dati non è firmato.

SQL_FALSE se il tipo di dati è firmato.

Viene restituito NULL se l'attributo non è applicabile al tipo di dati o se il tipo di dati non è numerico.
FIXED_PREC_SCALE (ODBC 2.0) 11 Smallint non NULL Indica se il tipo di dati ha una precisione e una scala fisse predefinite (specifiche dell'origine dati), ad esempio un tipo di dati money:

SQL_TRUE se ha una precisione e una scala fisse predefinite.

SQL_FALSE se non dispone di precisione e scala fisse predefinite.
AUTO_UNIQUE_VALUE (ODBC 2.0) 12 Smallint Indica se il tipo di dati è autoincrementing:

SQL_TRUE se il tipo di dati è in corso di recupero automatico.

SQL_FALSE se il tipo di dati non viene eseguito automaticamente.

Viene restituito NULL se l'attributo non è applicabile al tipo di dati o se il tipo di dati non è numerico.

Un'applicazione può inserire valori in una colonna con questo attributo, ma in genere non può aggiornare i valori nella colonna.

Quando viene eseguito un inserimento in una colonna con incremento automatico, un valore univoco viene inserito nella colonna in fase di inserimento. L'incremento non è definito, ma è specifico dell'origine dati. Un'applicazione non deve presupporre che una colonna con incremento automatico inizi in un determinato punto o incrementi di un determinato valore.
LOCAL_TYPE_NAME (ODBC 2.0) 13 Varchar Versione localizzata del nome del tipo di dati dipendente dall'origine dati. Se il nome localizzato non è supportato dall'origine dati, viene restituito NULL. Questo nome è destinato solo alla visualizzazione, ad esempio nelle finestre di dialogo.
MINIMUM_SCALE (ODBC 2.0) 14 Smallint Scala minima del tipo di dati nell'origine dati. Se a un tipo di dati è associata una scala fissa, le colonne MINIMUM_SCALE e MAXIMUM_SCALE contengono entrambe lo stesso valore. Ad esempio, una colonna SQL_TYPE_TIMESTAMP potrebbe avere una scala fissa per i secondi frazionari. Se la scala non è applicabile, viene restituito NULL. Per altre informazioni, vedere Dimensioni delle colonne, Cifre decimali, Lunghezza ottetto di trasferimento e Dimensioni di visualizzazione nell'Appendice D: Tipi di dati.
MAXIMUM_SCALE (ODBC 2.0) 15 Smallint Scala massima del tipo di dati nell'origine dati. Se la scala non è applicabile, viene restituito NULL. Se la scala massima non viene definita separatamente nell'origine dati, ma viene invece definita come uguale alla precisione massima, questa colonna contiene lo stesso valore della colonna COLUMN_SIZE. Per altre informazioni, vedere Dimensioni delle colonne, Cifre decimali, Lunghezza ottetto di trasferimento e Dimensioni di visualizzazione nell'Appendice D: Tipi di dati.
SQL_DATA_TYPE (ODBC 3.0) 16 Smallint NON NULL Valore del tipo di dati SQL visualizzato nel campo SQL_DESC_TYPE del descrittore. Questa colonna corrisponde alla colonna DATA_TYPE, ad eccezione dei tipi di dati interval e datetime.

Per i tipi di dati interval e datetime, il campo SQL_DATA_TYPE nel set di risultati restituirà SQL_INTERVAL o SQL_DATETIME e il campo SQL_DATETIME_SUB restituirà il codice secondario per l'intervallo o il tipo di dati datetime specifico. (Vedere Appendice D: Tipi di dati.
SQL_DATETIME_SUB (ODBC 3.0) 17 Smallint Quando il valore di SQL_DATA_TYPE è SQL_DATETIME o SQL_INTERVAL, questa colonna contiene il codice secondario datetime/interval. Per i tipi di dati diversi da datetime e interval, questo campo è NULL.

Per i tipi di dati interval o datetime, il campo SQL_DATA_TYPE nel set di risultati restituirà SQL_INTERVAL o SQL_DATETIME e il campo SQL_DATETIME_SUB restituirà il codice secondario per l'intervallo o il tipo di dati datetime specifico. (Vedere Appendice D: Tipi di dati.
NUM_PREC_RADIX (ODBC 3.0) 18 Integer Se il tipo di dati è un tipo numerico approssimativo, questa colonna contiene il valore 2 per indicare che COLUMN_SIZE specifica un numero di bit. Per i tipi numerici esatti, questa colonna contiene il valore 10 per indicare che COLUMN_SIZE specifica un numero di cifre decimali. Negli altri casi la colonna è NULL.
INTERVAL_PRECISION (ODBC 3.0) 19 Smallint Se il tipo di dati è un tipo di dati interval, questa colonna contiene il valore della precisione iniziale dell'intervallo. (Vedere Precisione del tipo di dati Interval nell'Appendice D: Tipi di dati. In caso contrario, questa colonna è NULL.

Le informazioni sugli attributi possono essere applicate ai tipi di dati o a colonne specifiche in un set di risultati. SQLGetTypeInfo restituisce informazioni sugli attributi associati ai tipi di dati; SQLColAttribute restituisce informazioni sugli attributi associati alle colonne in un set di risultati.

Per informazioni su Vedere
Associazione di un buffer a una colonna in un set di risultati Funzione SQLBindCol
Annullamento dell'elaborazione delle istruzioni Funzione SQLCancel
Restituzione di informazioni su una colonna in un set di risultati Funzione SQLColAttribute
Recupero di un blocco di dati o scorrimento di un set di risultati Funzione SQLFetchScroll
Recupero di una singola riga o di un blocco di dati in una direzione forward-only Funzione SQLFetch
Restituzione di informazioni su un driver o un'origine dati Funzione SQLGetInfo

Vedi anche

Riferimento API ODBC
File di intestazione ODBC