Názory ke článku Oracle C++ Call Interface – 3. Niečo málo o Statementoch
štěpán NOVÝ
15. 10. 2007
15. 10. 2007
Vo vyššie spomenutom príklade neustále voláme principiálne ten istý INSERT len s inými hodnotami. Na takomto spôsobe nieje nič zlé, len je to trošku otrava zakaždým vytvárať kompletný reťazec obsahujúci INSERT. V Oracle však existujú takzvané parametrizované dotazy, ktoré to podstatne uľahčia.
Tato formulace není úplně přesná :-) čtenář by mohl nabýt dojmu, že to je kvůli programátorské pohodlnosti. Při sestavování dotazů se vykonává mnoho operací - parsování, sémantická kontrola, analyzování dotazu a v neposlední řadě vyhodnocení přístupového plánu. Výčet není kompletní, ale napovídá, že za tím stojí poměrně "hodně práce" databázového enginu. Hlavní výhodou "prepare statement" je, že databáze provede většinu operací pouze při prvním spuštění a při dalších "parametrizovaných" dotazech si dohledá prováděcí plán v paměti databázové instance. Kromé výkonnostního zlepšení tím v podstatě provedete ošetření script-injection, protože parametrizovaný dotaz očekává vstupní hodnoty konkrétních datových typů.
Databáze samozřejmě zajišťuje i stav, kdy dojde k "zneplatnění" prováděcího plánu - např. alterování objektu, přepočet statistik atd. V tomto případě jej označí jako "invalid" a při dalším spuštění se provede jeho výpočet znovu :-) tato problematika by asi vydala na samostatný článek.
V každém případě chválím ;-) píšete výborný seriál, jen tak dál! Mám zkušenosti jenom s Javou, ale očekávám že API driveru bude podobné (~stejné).
btw. Určitě v seriálu zmiňte hromadné zpracování (batche) a práci s definovanými objekty (types).