További
segédanyagok a PL/SQL-hez:
-
Nikovits Tibor (ELTE) PL/SQL
összefoglaló: NT_Plsql.htm
- Kósa Balázs (ELTE) PL/SQL
összefoglaló: KB_Plsql.pdf
- Ullman/Chang (Standford) Using
Oracle PL/SQL
- PL/SQL
Technology Center (Oracle 11g PL/SQL) 3.1.
PL/SQL alapok,
változóhasználat,
vezérlési
szerkezetek PL/SQL (névtelen) blokkok szerkezete
-- PL/SQL Language Reference 11gR2 >> 2.fej.
Alapok
[I. a deklarációs,] II. a
végrehajtható és [III. a
kivételkezelő] rész
Változóhasználat I. az SQL*Plus felhasználói
változói,
II. az
SQL*Plus környezeti változói,
III. a PL/SQL változói. 1a_valtozok.sql
- Változóhasználat, az
adatok képernyőre való
kiíratása
(Az
Oracle
beépített DBMS_OUTPUT
csomag PUT_LINE
eljárása).
-- Írjunk egy PL/SQL blokkot
tartalmazó SQL*Plus
szkipt programot, amely
a
felhasználótól bekér egy
egész számot! Ha ez a szám nagyobb
100-nál,
akkor a PL/SQL blokkban,
egyébként pedig a PL/SQL blokkot követő
gazdanyelvi (SQL*Plus)
környezetben írassa ki
A SELECT utasítás a
PL/SQL-ben 1b_select_into.sql
- A SELECT ... INTO
utasítás
-- Határozzuk meg egy PL/SQL program
segítségével a
felhasználó által
megadott
telephelyen dolgozók
béröszegét. A telephelynek a
várost
(loc)
adjuk meg (mint
például Boston, Chicaco, Dallas vagy New York).
-- Ennek a feladatnak további
megoldásaira a következő szakaszban
visszatérünk
(lásd 2a_select_into.sql és
további
megoldásait is).
Vezérlési szerkezetek -- PL/SQL Language Reference 11gR2 >> 4.fej.
Control Statements
-- A programozási nyelvekből ismert egyszerű
példák 1c_if_then.sql
- Feltételes
utasítás (két
egész
szám összege páros-e) 1d_loop_ciklus.sql
- LOOP ciklus (a
Fibonacci-sorozat elemei) 1e_while_ciklus.sql
- WHILE
ciklus (az
Euklideszi
algoritmus) 1f_for_ciklus.sql
- FOR ciklus (páratlan
számok
négyzetösszege)
Hivatkozási
adattípus, %TYPE, %ROWTYPE 2a_select_into.sql
- A SELECT ... INTO
utasítás
-- Határozzuk meg egy PL/SQL program
segítségével a
felhasználó által
megadott
telephelyen dolgozók
béröszegét. A telephelynek a
várost
(loc)
adjuk meg (mint
például Boston, Chicaco, Dallas vagy New York).
-- Lásd a korábbi 1b_select_into
feladat
I.megoldását is, csak most
hivatkozási
típus
deklarálásával oldjuk meg a feladatot!
II.megoldás:
Közvetlen
összegzéssel. III.mo:
Tagonkénti összesítéssel
(nézettáblával).
-- Valamint rejtett kurzorral
való másik megoldására
még
visszatérünk. Rekord adattípus, gyűjtőtábla
típus 2b_gyujtotabla.sql
- Összetett
típus, rekord,
gyűjtőtábla
- Írjunk PL/SQL programot, amely
meghatározza a 7698
azonosítójú
dolgozó
nevét
gyűjtőtábla használatával.
3.3.
Kurzor, explicit kurzor, for update záradék
-- Példák kurzor
használatára: plsql_kurzor.sql
-- PL/SQL Language Reference 11gR2 >> 6.fej.
Static SQL/Cursors
A ZH-n is használható a
dokumentáció, érdemes
átnézni a
példákat,
például FOR UPDATE-re >>
"Example
6-43",
mint az alábbi példa:
3a_kurzor.sql
- Kurzor,
kurzorattribútumok (%FOUND,
%NOTFOUND)
- Növeljük meg a hivatalnokok
(CLERK)
fizetését a saját
fizetésük 20%-ával!
(hibas_mo.sql
-> tanulságok leszűrése!)
3b_impl_kurzor.sql
- Implicit kurzor, kurzorhasználat
FOR ciklusban - Hozzuk
létre a dolgozo
táblát
az emp táblából, és
bővítsük
azt egy sorszám
oszloppal. Ezt
töltsük fel 1-től
kiindulva egyesével növekvő
értékkel minden
dolgozó esetén a
dolgozók nevének
ábécé sorrendje szerint.
1.) Hello World program (alap program, kiírás a
képernyőre)
2.) Írjuk ki KING fizetését
(olvasás
táblából
változóba)
3.) Írjuk ki KING belépési
dátumát és
fizetését különböző
formátumokban 1981.11.17,
1981-november-17,
stb
(dátum
formátumok, több oszlopos
lekérdezés)
4.) Írjuk ki a dolgozók nevét
és fizetését (kurzor
használata)
5.) Írjuk ki a 3. 5. és 8. legnagyobb
fizetésű dolgozó nevét,
fizetését
(kurzor attribútumok)
6.) Tegyük be a dolgozók nevét egy plsql
tömbbe, és írjuk ki az utolsó
előtti sort.
(plsql tömb
használata) --
Segítségképpen: Tábla
típus
definiálása:
TYPE tábla_típus_neve
IS TABLE OF adattípus INDEX BY BINARY_INTEGER;
ahol az
adattípus lehet %TYPE vagy %ROWTYPE-al
megadva,
lehet
előre definiált típus vagy általunk
definiált rekordtípus.
Tábla
deklarálása: tábla_név
tábla_típus_neve;
Hivatkozás a
tábla elemeire:
tábla_név(index)
PL/SQL tábla
attribútumok,
például: tábla_név.COUNT hány
eleme van a táblának.
7.) Írjuk ki a dolgozók nevét
és fizetését mind a 3-féle
kurzorhasználattal.
8.) Írjuk ki azon dolgozók nevét
és fizetését, akik fizetése
nagyobb mint
a felhasználó
által
megadott szám.
9.) Írjuk ki azon dolgozók nevét,
fizetését és
osztálykódját, akik a
felhasználó
által megadott
osztályon dolgoznak. A felhasználó
által
megadott betű
legyen A, R, S (Accounting
...) a 10, 20,
30-as
osztály esetén.
(paraméteres kurzor)
További
gyakorló feladatok találhatóak
az Oracle
Példatárban
-- Lásd Feladatok.pdf (8-9.fejezet
feladatai)
-- Ehhez: a táblák
létrehozása cr_dept_emp.sql