Sdílet prostřednictvím


Více výsledků

Výsledek je něco, co zdroj dat vrátí po provedení příkazu. Odbc má dva typy výsledků: sady výsledků a počty řádků. Počet řádků je počet řádků ovlivněných příkazem update, delete nebo insert. Dávky popsané v dávkách příkazů SQL můžou generovat více výsledků.

Následující tabulka uvádí možnosti SQLGetInfo , které aplikace používá k určení, zda zdroj dat vrací více výsledků pro každý jiný typ dávky. Konkrétně může zdroj dat vrátit jeden počet řádků pro celou dávku příkazů nebo počet jednotlivých řádků pro každý příkaz v dávce. V případě příkazu generujícího sadu výsledků s polem parametrů může zdroj dat vrátit jednu sadu výsledků pro všechny sady parametrů nebo jednotlivé sady výsledků pro každou sadu parametrů.

Typ dávky Počty řádků Sady výsledků
Explicitní dávka SQL_BATCH_ROW_COUNT[a] --[b]
Procedure SQL_BATCH_ROW_COUNT[a] --[b]
Pole parametrů SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] Příkazy generování počtu řádků v dávce se můžou podporovat, ale návrat počtu řádků se nepodporuje. Možnost SQL_BATCH_SUPPORT v SQLGetInfo označuje, jestli jsou příkazy generování počtu řádků povoleny v dávkách; možnost SQL_BATCH_ROW_COUNTS určuje, jestli jsou tyto počty řádků vráceny do aplikace.

[b] Explicitní balíčky a procedury vždy vrací více sad výsledků, pokud obsahují více příkazů, které generují sady výsledků.

Poznámka:

Možnost SQL_MULT_RESULT_SETS zavedená v rozhraní ODBC 1.0 poskytuje pouze obecné informace o tom, zda lze vrátit více sad výsledků. Konkrétně je nastaveno na "Y", pokud jsou bity SQL_BS_SELECT_EXPLICIT nebo SQL_BS_SELECT_PROC vráceny pro SQL_BATCH_SUPPORT, nebo pokud je SQL_PAS_BATCH vrácen pro SQL_PARAM_ARRAYS_SELECT.

Pro zpracování více výsledků aplikace volá SQLMoreResults. Tato funkce zahodí aktuální výsledek a zpřístupní další výsledek. Vrátí SQL_NO_DATA, pokud nejsou k dispozici žádné další výsledky. Předpokládejme například, že se jako dávka spustí následující příkazy:

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

Po provedení těchto příkazů aplikace načte řádky ze sady výsledků vytvořené příkazem SELECT . Po načtení řádků volá SQLMoreResults , aby byl k dispozici počet částí, které byly přehodnoceny. V případě potřeby SQLMoreResults zahodí nenačítané řádky a zavře kurzor. Aplikace pak volá SQLRowCount k určení, kolik částí bylo repricováno příkazem UPDATE .

Je specifické pro ovladač, zda se celý příkaz batch provede předtím, než jsou dostupné jakékoli výsledky. V některých implementacích se jedná o tento případ; v jiných volání SQLMoreResults aktivuje spuštění dalšího příkazu v dávce.

Pokud některý z příkazů v dávce selže, SQLMoreResults vrátí buď SQL_ERROR, nebo SQL_SUCCESS_WITH_INFO. Pokud byla dávka přerušena, když příkaz selhal, nebo pokud byl neúspěšný příkaz posledním příkazem v dávce, funkce SQLMoreResults vrátí SQL_ERROR. Pokud dávka nebyla přerušena při selhání příkazu a selhávající příkaz nebyl posledním příkazem v dávce, SQLMoreResults vrátí SQL_SUCCESS_WITH_INFO. SQL_SUCCESS_WITH_INFO označuje, že byla vygenerována alespoň jedna sada výsledků nebo počet a že dávka nebyla přerušena.