Az Anonymous Blocks bemutatása A PL/SQL, az SQL Oracle eljárási kiterjesztése, egy hordozható, nagy teljesítményű tranzakció-feldolgozó nyelv, amely szorosan integrálva van az SQL-lel. A PL/SQL forrásprogramok alapegysége a blokk, amely a kapcsolódó deklarációkat és utasításokat csoportosítja. A PL/SQL blokkot a DECLARE, BEGIN, EXCEPTION és END kulcsszavak határozzák meg. Ezek a kulcsszavak a blokkot deklaratív részre, végrehajtható részre és kivételkezelő részre osztják. Csak a végrehajtható rész szükséges. begin dbms_output.put_line('hello world'); end; / Mivel egy névtelen blokknak saját deklarációs és kivételszakaszai lehetnek, a fejlesztők névtelen blokkokat használhatnak, hogy teret biztosítsanak az azonosítóknak és a kivételkezelésnek egy nagyobb programon belül. declare l_today date := sysdate; begin dbms_output.put_line( 'today is '||to_char(l_today,'Day')); exception when others then dbms_output.put_line(sqlerrm); end; / 2. modul Feltételes logika Adjunk hozzá néhány feltételes logikát az if ... then ... else szintaxis használatával. A TO_CHAR függvény használható dátumok és számadattípusok formázására. A D formátumú maszk a hét napja, egy 1 és 7 közötti szám. declare l_today date := sysdate; begin if to_char(l_today,'D') < 4 then dbms_output.put_line( 'Have a wonderful week'); else dbms_output.put_line( 'Enjoy the rest of the week'); end if; dbms_output.put_line('today is '|| to_char(l_today,'Day')|| ' day '||to_char(l_today,'D')|| ' of the week.'); end; / 3. modul Statikus SQL A PL/SQL segítségével könnyen integrálhatók az SQL utasítások, az alábbi példa egy példát mutat be a SELECT INTO használatára egy Oracle adatszótári táblával. DECLARE howmany INTEGER; num_tables INTEGER; BEGIN -- Begin processing SELECT COUNT(*) INTO howmany FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE'; -- Check number of tables num_tables := howmany; -- Compute another value dbms_output.put_line (to_char(num_tables,'999G999G990')||' tables'); END; Íme egy példa a kurzor ciklushoz való használatára DECLARE l_table_count integer := 0; BEGIN for c1 in ( SELECT table_name FROM USER_TABLES order by 1) loop l_table_count := l_table_count + 1; dbms_output.put_line(c1.table_name); end loop; if l_table_count = 0 then dbms_output.put_line('You have no tables in your schema'); end if; END; 4. modul Dinamikus SQL Bővítsük ki statikus SQL-példánkat néhány dinamikus tartalommal. Annak érdekében, hogy a dinamikus SQL visszaadhasson egy értéket a PL/SQL blokknak, létrehozunk egy "PKG" nevű csomagot. CREATE OR REPLACE PACKAGE pkg AUTHID DEFINER AS table_row_count integer; END; / DECLARE l_table_count integer := 0; l_sql varchar2(32767); BEGIN for c1 in ( SELECT table_name FROM USER_TABLES order by 1) loop l_table_count := l_table_count + 1; l_sql := 'begin select count(*) into pkg.table_row_count from "'||c1.table_name||'"; end;'; execute immediate l_sql; dbms_output.put_line(c1.table_name||' - '||to_char(pkg.table_row_count,'999G999G990')||' rows'); end loop; if l_table_count = 0 then dbms_output.put_line('You have no tables in your schema'); end if; END; /