602SQL-Úplná dokumentace Index  

Deklarace objektů v SQL

Objekty, s nimiž pracuje jazyk SQL, lze rozdělit podle toho, kde a jak dlouho existují, do několika skupin:

Lokální i globální objekty jsou označeny jmény. Ve jménech se rozlišuje pouze prvních 31 znaků. Lokální objekty deklarované v různých blocích mohou mít stejná jména.

Některé kategorie objektů, například triggery nebo sekvence, mohou existovat pouze jako globální.

Lokální objekty

Lokální objekty se deklarují uvnitř bloku. Jakmile provádění příkazů SQL vstoupí do tohoto bloku, jsou lokální objekty automaticky vytvořeny a při opuštění bloku zaniknou. Nelze s nimi pracovat z jiného místa než z bloku, v němž jsou deklarovány.

Jako lokální objekty lze deklarovat proměnné, rutiny, výjimky, handlery, kurzory a lokální tabulky.

Globální objekty

Globální objekty (tabulky, dotazy, domény, rutiny, triggery, sekvence, fulltexty) se nedeklarují ale vytváří se a ruší pomocí příkazů CREATE a DROP nebo pomocí interaktivních nástrojů v Klientském vývojovém prostředí. Každý objekt z těchto kategorií je samostatně vidět v seznam objektů na řídicím panelu. Většinou vznikají při již importu aplikace na SQL server. Jsou přístupné ze všech objektů ve schématu (a při použití jména schématu jako prefixu i z jiných schémat stejné databáze).

Globálně deklarované objekty

Globální proměnné, výjimky a handlery se vytvářejí tak, že se jejich deklarace zapíše do speciálního objektu jménem Module_globals. Tento objekt je po vytvoření na řídicím panelu umístěn mezi procedurami. Pro vytvoření použijte dialog pro vytváření rutin z řídicího panelu, Module_globals má poněkud odlišnou syntaxi než běžná SQL procedura. Normální procedura pojmenovaná Module_globals nepůjde přeložit.

Objekty deklarované tímto způsobem nejsou přístupné z jiných schémat. Rutina Module_globals není přístupná z jiných schémat.

Globální handlery nesmějí provádět příkazy manipulující s obsahem databáze. Mohou však volat procedury, které tuto práci provedou za ně.

Globální deklarace proměnných mohou v klauzuli DEFAULT mít obecný výraz (např. volání funkce, SQL rutiny apod.), nicméně se doporučuje využívat to s rozvahou a jen v nejjednodušších případech. Nedoporučuje se volat objekty z jiných aplikací.

Je-li v Module_globals syntaktická chyba, trasuje se jako Chyba v objektu na pozadí.

Sdílení obsahu globálních proměnných

Pro každého klienta pracujícího s objekty ve schématu existuje zvláštní instance všech globálních proměnných tohoto schématu. Hodnoty globálních proměnných nastavené jedním klientem nejsou proto viditelné pro ostatní klienty.

Pokud klient provede SQL příkaz, který přiřadí některé globální proměnné hodnotu, pak tato hodnota zůstane v proměnné zachována až do přiřazení nové hodnoty stejným klientem. Volá-li tedy klient dvě procedury, pak druhá procedura vidí v globálních proměnných ty hodnoty, které v nich zanechala první procedura. Po odhlášení se klienta od serveru jeho instance globálních proměnných zanikne.

Pro předávání hodnot mezi klienty nebo pro persistentní uložení hodnot slouží databázové tabulky, nikoli proměnné.



Odchylky od Intermediate level směrem k Full level nebo k SQL 3

Veškeré deklarace jsou implementovány dle úrovně SQL 3.

Seznam subsekcí: