PL/SQL

A Wikipédiából, a szabad enciklopédiából

A PL/SQL (Procedural Language/Structured Query Language) az Oracle által az SQL kiterjesztéseként kifejlesztett procedurális programozási nyelv. Az Oracle adatbáziskezelőt használva ezen a nyelven írhatunk triggereket és más tárolt eljárásokat. A nyelv alapja az Ada programozási nyelv; természetesen a PL/SQL magában foglalja az SQL nyelvet, pontosabban annak SELECT, INSERT, DELETE, UPDATE illetve OPEN, FETCH, CLOSE utasításait.

Példaprogramok[szerkesztés | forrásszöveg szerkesztése]

  • Egy 'my_table_before' nevű triggert definiálunk, amely a 'my_table' tábla 'statusz' mezője alapján tartja karban a 'my_stat_table' nevű statisztikai segédtáblát:
 create or replace trigger my_table_before
 before insert or update or delete on my_table
 for each row
 begin
     if inserting or
        (updating and :new.statusz <> :old.statusz) then
         update my_stat_table st set st.count = st.count+1
         where st.statusz = :new.statusz;
         if sql%notfound then
             insert into my_stat_table values (:new.statusz, 1);
         end if;
     end if;
     if deleting or
        (updating and :new.statusz <> :old.statusz) then
         update my_stat_table st set st.count = st.count-1
         where st.statusz = :old.statusz;
     end if;
 end;
 /

Megj: a program végén lévő perjel akkor kell, ha az eljárást az Sql*Plus használatával definiáljuk, ezzel jelezzük a PL/SQL blokk végét.

  • Úgynevezett 'névtelen PL/SQL blokk' hívása Pro*C-ből. A PL/SQL blokk egy cursort nyit meg, amelyet egy 'SQL_CURSOR' típusú host-változóban tárolunk.
    SQL_CURSOR crsr;
    varchar ename [32];
    int ideptno, empno, deptno;

    EXEC SQL ALLOCATE :crsr;

    ideptno= 30;
    EXEC SQL EXECUTE
        BEGIN
           OPEN :crsr FOR
           SELECT ename, empno, deptno
           FROM emp
           WHERE deptno = :ideptno;
        END;
    END-EXEC;

    EXEC SQL FETCH :crsr INTO :ename, :empno, :deptno;

Forrás[szerkesztés | forrásszöveg szerkesztése]