Változóhasználat, az
adatok képernyőre való
kiíratása 1a_valtozok.sql
- -- Oracle DBMS_OUTPUT
csomag PUT_LINE
eljárása
-- 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.
-- Í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
Amikor a
lekérdezés egy sort ad vissza: SELECT
INTO utasítás 1b_select_into.sql
- A SELECT ... INTO
utasítás a PL/SQL-ben
-- 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 a PL/SQL-ben -- 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)
További
gyakorló feladatok: Lásd Példatár
"8.fejezet.
Változóhasználat, vezérlési
szerkezetek a PL/SQL-ben" feladatai
3.2.
SELECT INTO, hivatkozási és összetett
adattípusok
-- SELECT
INTO csak akkor használható, ha a
lekérdezés pontosan egy sort ad.
Ha a lekérdezés
több sorral
tér vissza kurzort kell használni,
lásd #3.3.
Kurzor
--
Példák rekordok, kollekciók
(tömbök) plsql_peldak.sql (Nikovits
Tibor)
-- PL/SQL Language Reference 11gR2 >> 3.fej.
PL/SQL Data Types
-- PL/SQL Language Reference 11gR2 >> 5.fej.
Collections and Records
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: IV.mo.
-- Valamint rejtett kurzorral
való másféle
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.
További
gyakorló feladatok: Lásd Példatár
"9.fejezet.
Hivatkozási és összetett
adattípusok" feladatai
Itt érdemes
átnézni a
PL/SQL Language Reference példáit,
például
6.fejezet Static SQL/Cursors részben "FOR UPDATE"-re
keresve
"Example
6-43"
példa hasonló, mint az alábbi
3a_kurzor.sql
feladat:
- Az Oracle dokumentációban szereplő példák kipróbálásához:
>> Lekérdezésekhez: createHRsyn
>> Módosításhoz: createHRtables
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)
Írjon PL/SQL blokkot
tartalmazó
script programot, amely a
felhasználótól
bekér egy egész
számot
és bekéri a nevét, majd a
PL/SQL
blokkból kiírja
"Szia <X.Y.
(név)>, a kedvenc
számod ez: <szám> " (mo:
'&nev' és
&szam)
2.) Írjuk ki KING fizetését
(olvasás
táblából
változóba), abban az esetben,
ha ismert, hogy pontosan egy KING nevű
dolgozó szerepel a táblában!
3.) Írjuk ki KING belépési
dátumát és
fizetését
különböző formátumokban,
mint például
1981.11.17,
1981-november-17,
stb (dátum
formátumok)
(pontosan egy sorból
álló
több oszlopos
lekérdezés)
4.) 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.
-- Feladatok
kurzorhasználatra:
5.) Írjuk ki a dolgozók nevét
és fizetését!
(több sort
visszaadó
lekérdezés, kurzor
használata)
6.) Írjuk ki a 3. 5. és 8. legnagyobb
fizetésű dolgozó nevét,
fizetését!
(kurzor attribútumok)
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)