Condividi tramite


Risultati multipli

Un risultato è un elemento restituito dall'origine dati dopo l'esecuzione di un'istruzione. ODBC ha due tipi di risultati: set di risultati e conteggi di righe. I conteggi delle righe sono il numero di righe interessate da un'istruzione update, delete o insert. I batch, descritti in Batch di istruzioni SQL, possono generare più risultati.

Nella tabella seguente sono elencate le opzioni SQLGetInfo usate da un'applicazione per determinare se un'origine dati restituisce più risultati per ogni tipo di batch diverso. In particolare, un'origine dati può restituire un conteggio di righe singolo per l'intero batch di istruzioni o singoli conteggi di righe per ogni istruzione nel batch. Nel caso di un'istruzione di generazione del set di risultati eseguita con una matrice di parametri, l'origine dati può restituire un singolo set di risultati per tutti i set di parametri o singoli set di risultati per ogni set di parametri.

Tipo di batch Conteggi delle righe Set di risultati
Batch esplicito SQL_BATCH_ROW_COUNT[a] --[b]
Procedure SQL_BATCH_ROW_COUNT[a] --[b]
Matrici di parametri SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] Le dichiarazioni che generano il conteggio delle righe all'interno di un batch possono essere supportate, ma non è possibile restituire i conteggi delle righe. L'opzione SQL_BATCH_SUPPORT in SQLGetInfo indica se le istruzioni di generazione del conteggio delle righe sono consentite in batch; l'opzione SQL_BATCH_ROW_COUNTS indica se questi conteggi di righe vengono restituiti all'applicazione.

[b] Batch espliciti e procedure restituiscono sempre più set di risultati quando includono più istruzioni di generazione del set di risultati.

Annotazioni

L'opzione SQL_MULT_RESULT_SETS introdotta in ODBC 1.0 fornisce solo informazioni generali sull'eventuale restituzione di più set di risultati. In particolare, è impostato su "Y" se i bit di SQL_BS_SELECT_EXPLICIT o SQL_BS_SELECT_PROC vengono restituiti per SQL_BATCH_SUPPORT o se SQL_PAS_BATCH viene restituito per SQL_PARAM_ARRAYS_SELECT.

Per elaborare più risultati, un'applicazione chiama SQLMoreResults. Questa funzione rimuove il risultato corrente e rende disponibile il risultato successivo. Restituisce SQL_NO_DATA quando non sono disponibili altri risultati. Si supponga, ad esempio, che le istruzioni seguenti vengano eseguite come batch:

SELECT * FROM Parts WHERE Price > 100.00;  
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00  

Dopo l'esecuzione di queste istruzioni, l'applicazione recupera le righe dal set di risultati creato dall'istruzione SELECT . Al termine del recupero delle righe, chiama SQLMoreResults per rendere disponibile il numero di parti che sono state ricreate. Se necessario, SQLMoreResults elimina le righe non recuperate e chiude il cursore. L'applicazione chiama quindi SQLRowCount per determinare quante parti sono state rideterminate nel prezzo dall'istruzione UPDATE.

Dipende dal driver se l'intera istruzione batch viene eseguita prima che siano disponibili risultati. In alcune implementazioni, questo è il caso; in altri, la chiamata a SQLMoreResults attiva l'esecuzione dell'istruzione successiva nel batch.

Se una delle istruzioni in un batch ha esito negativo, SQLMoreResults restituirà SQL_ERROR o SQL_SUCCESS_WITH_INFO. Se il batch è stato interrotto quando l'istruzione non è riuscita o l'istruzione non riuscita è stata l'ultima istruzione nel batch, SQLMoreResults restituirà SQL_ERROR. Se il batch non è stato interrotto quando l'istruzione non è riuscita e l'istruzione non riuscita non è stata l'ultima istruzione nel batch, SQLMoreResults restituirà SQL_SUCCESS_WITH_INFO. SQL_SUCCESS_WITH_INFO indica che è stato generato almeno un set di risultati o un conteggio e che il batch non è stato interrotto.