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 delle righe. Il conteggio delle righe è il numero di righe interessate da un'istruzione di aggiornamento, cancellazione o inserimento. I batch, descritti in Batch di istruzioni SQL, possono generare risultati multipli.
La seguente tabella elenca le opzioni di SQLGetInfo che un'applicazione utilizza per determinare se un'origine dati restituisce risultati multipli per ogni diverso tipo di batch. In particolare, un'origine dati può restituire un singolo conteggio delle righe per l'intero batch di istruzioni o conteggi delle righe individuali per ogni istruzione del 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] |
Procedura | SQL_BATCH_ROW_COUNT[a] | --[b] |
Matrici di parametri | SQL_PARAM_ARRAYS_ROW_COUNTS | SQL_PARAM_ARRAYS_SELECTS |
[a] Le istruzioni per la generazione del conteggio delle righe in un batch possono essere supportate, ma la restituzione del conteggio delle righe non è supportata. L'opzione SQL_BATCH_SUPPORT in SQLGetInfo indica se le istruzioni per la generazione del conteggio delle righe sono consentite in batch. L'opzione SQL_BATCH_ROW_COUNTS indica se questi conteggi delle righe vengono restituiti all'applicazione.
[b] Batch espliciti e procedure restituiscono sempre più set di risultati quando includono più istruzioni per la generazione del set di risultati.
Nota
L'opzione SQL_MULT_RESULT_edizione Standard TS introdotta in ODBC 1.0 fornisce solo informazioni generali sull'eventuale restituzione di più set di risultati. In particolare, viene impostato su "Y" se vengono restituiti i bit SQL_BS_SELECT_EXPLICIT o SQL_BS_SELECT_PROC per SQL_BATCH_SUPPORT o se viene restituito SQL_PAS_BATCH per SQL_PARAM_ARRAYS_SELECT.
Per elaborare risultati multipli, un'applicazione chiama SQLMoreResults. Questa funzione rimuove il risultato corrente e rende disponibile il risultato successivo. Se viene restituito SQL_NO_DATA, non è più disponibile alcun risultato. Ad esempio, supponiamo che le seguenti istruzioni vengano eseguite in 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 ridefinite. Se necessario, SQLMoreResults elimina le righe non recuperate e chiude il cursore. L'applicazione chiama quindi SQLRowCount per determinare il numero di parti che sono state ridefinite dall'istruzione UPDATE.
È specifico del driver se l'intera istruzione batch viene eseguita prima che siano disponibili risultati. In alcune implementazioni, ciò avviene; in altre, 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 se l'istruzione non riuscita è 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.