Movatterモバイル変換


[0]ホーム

URL:


Ugrás a tartalomhoz
Wikipédia
Keresés

PL/SQL

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

Változat állapota

Ez a lap egy ellenőrzött változata

Ez aközzétett változat,ellenőrizve:2025. június 23.

Pontosságellenőrzött

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

Példaprogramok

[szerkesztés]
  • 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 egyfizetesek 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)

Alaptáblák:

select*fromfizetesek;NAMESAL---------- ----------ADAM12000BOB13000BOBEK14000select*fromfiz_modosit;NAMENEW_SAL---------- ----------ADAM13000BOBEK15000MARRY16000

Ha a fiztesek táblát merge paranccsal változtatjuk a fiz_modosit tábla használatával, akkor a következőket várjuk:

- Bobek fizetése 15000 legyen (update)

- Adam sora törlődjön (kevesebb a fizetése, mint 13000) (delete)

- Marry kerüljön bele a fizetések táblába (insert)

mergeintofizetesekusingfiz_modositon(fizetesek.name=fiz_modosit.name)whenmatchedthenupdatesetsal=new_saldeletewheresal<=13000whennotmatchedtheninsert(fizetesek.name,fizetesek.sal)values(fiz_modosit.name,fiz_modosit.new_sal);-- 3 rows merged.select*fromfizetesek;NAMESAL---------- ----------BOB13000BOBEK15000MARRY16000

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:
createorreplacetriggermy_table_beforebeforeinsertorupdateordeleteonmy_tableforeachrowbeginifinsertingor(updatingand:new.statusz<>:old.statusz)thenupdatemy_stat_tablestsetst.count=st.count+1wherest.statusz=:new.statusz;ifsql%notfoundtheninsertintomy_stat_tablevalues(:new.statusz,1);endif;endif;ifdeletingor(updatingand:new.statusz<>:old.statusz)thenupdatemy_stat_tablestsetst.count=st.count-1wherest.statusz=:old.statusz;endif;end;/

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

  • Úgynevezett 'névtelen PL/SQL blokk' hívásaPro*C-ből. A PL/SQL blokk egy cursort nyit meg, amelyet egy 'SQL_CURSOR' típusú host-változóban tárolunk.
SQL_CURSORcrsr;varcharename[32];intideptno,empno,deptno;EXECSQLALLOCATE:crsr;ideptno=30;EXECSQLEXECUTEBEGINOPEN:crsrFORSELECTename,empno,deptnoFROMempWHEREdeptno=:ideptno;END;END-EXEC;EXECSQLFETCH:crsrINTO:ename,:empno,:deptno;

Források

[szerkesztés]

Kapcsolódó szócikkek

[szerkesztés]
Vállalati igazgatók
Beszerzések
Adatbázisok
Programozási nyelvek
IDE-k
Middleware
Operációs rendszerek
Számítógépes hardver
Számítástechnikai rendszerek (appliances)
Oktatás és elismerés
--
Főbb programozási nyelvek
Ez aprogramozási nyelvekkel és programozással kapcsolatos lap egyelőrecsonk (erősen hiányos).Segíts te is, hogy igazi szócikk lehessen belőle!
A lap eredeti címe: „https://hu.wikipedia.org/w/index.php?title=PL/SQL&oldid=28214240
Kategóriák:
Rejtett kategóriák:

[8]ページ先頭

©2009-2026 Movatter.jp