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
MERGE utasítás PL SQL nyelven, amely magában foglalja az UPDATE, DELETE és INSERT utasításokat
A következő példában adott egy fizetesek tábla (benne a nevekkel és fizetésekkel) és egy fiz_modosit tábla (benne nevekkel és az új fizetésekkel). A merge paranccsal a következőket tudjuk megtenni:
- ha van egyezés a név alapján, akkor az új fizetésre módosítjuk a fizetést (update)
- ha van egyezés a név alapján és a fizetés 13000 vagy kevesebb, akkor töröljük a sort (delete)
- ha nincs egyezés a név alapján akkor új sort szúrunk be name és new_sal értékkel (insert)
A három változás megtörtént. De felmerül kérdésként, hogy miért nem kerül törlésre Bob fizetése, hiszen megfelel a delete feltételnek (kisebb vagy egyenlő mint 13000). Azért nem kerül törlésre, mert a merge során csak azok a sorokkal történik változás, amelyek a merge során érintettek, azaz benne vannak a using után álló módosítótáblában. Például: Adam szerepelt ebben a táblában, ezért törlődött is a sor, de Bob nem (ezért nem történt vele semmi)
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: