„Informatikai technológiák laboratórium 1 - AUT 1. mérés: Adatbázis szerver oldali programozása” változatai közötti eltérés
(Egy közbenső módosítás ugyanattól a szerkesztőtől nincs mutatva) | |||
5. sor: | 5. sor: | ||
PL/SQL anonymous blokk szerkezete ([opcionális részek]): | PL/SQL anonymous blokk szerkezete ([opcionális részek]): | ||
− | < | + | <syntaxhighlight lang="sql"> |
[DECLARE] | [DECLARE] | ||
BEGIN | BEGIN | ||
11. sor: | 11. sor: | ||
[EXCEPTION] | [EXCEPTION] | ||
END; | END; | ||
− | </ | + | </syntaxhighlight> |
Forrás: https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/05-Oracle%20Server%20programoz%C3%A1s.pdf, [http://i.imgur.com/RrF1RzC.png 32. dia]<br> | Forrás: https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/05-Oracle%20Server%20programoz%C3%A1s.pdf, [http://i.imgur.com/RrF1RzC.png 32. dia]<br> | ||
18. sor: | 18. sor: | ||
==2. Hogyan lehet Oracle szerveren elkapni egy hibát?== | ==2. Hogyan lehet Oracle szerveren elkapni egy hibát?== | ||
− | < | + | <syntaxhighlight lang="sql"> |
BEGIN | BEGIN | ||
utasítások_sorozata1; | utasítások_sorozata1; | ||
30. sor: | 30. sor: | ||
utasítások_sorozata4; | utasítások_sorozata4; | ||
END; | END; | ||
− | </ | + | </syntaxhighlight> |
Forrás: https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/05-Oracle%20Server%20programozás.pdf, [http://i.imgur.com/QuiaamK.png 40. dia]<br> | Forrás: https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/05-Oracle%20Server%20programozás.pdf, [http://i.imgur.com/QuiaamK.png 40. dia]<br> | ||
37. sor: | 37. sor: | ||
Példa:<br> | Példa:<br> | ||
− | < | + | <syntaxhighlight lang="sql"> |
exception | exception | ||
when no_data_found then | when no_data_found then | ||
/* hibakezelés a no_data_found típusú hibára */ | /* hibakezelés a no_data_found típusú hibára */ | ||
− | </ | + | </syntaxhighlight> |
==3. Hogyan kell alkalmazás hibát dobni Oracle szerveren?== | ==3. Hogyan kell alkalmazás hibát dobni Oracle szerveren?== | ||
47. sor: | 47. sor: | ||
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#sthref2006 | http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#sthref2006 | ||
− | < | + | <syntaxhighlight lang="sql"> |
raise_application_error(-20001, 'hibauzenet'); | raise_application_error(-20001, 'hibauzenet'); | ||
− | </ | + | </syntaxhighlight> |
A függvény első paramétere a hibakód, negatív egész számnak kell lennie a -20000..-20999 tartományban. A második paraméter egy karaktersorozat, 2048 byte hosszúságig. | A függvény első paramétere a hibakód, negatív egész számnak kell lennie a -20000..-20999 tartományban. A második paraméter egy karaktersorozat, 2048 byte hosszúságig. | ||
69. sor: | 69. sor: | ||
Konkrétan: | Konkrétan: | ||
− | < | + | <syntaxhighlight lang="sql"> |
raiserror('hibauzenet', 16, 1) | raiserror('hibauzenet', 16, 1) | ||
raiserror('hibauzenet2, valami szam: %d', 16, 1, 1234) | raiserror('hibauzenet2, valami szam: %d', 16, 1, 1234) | ||
− | </ | + | </syntaxhighlight> |
A függvény neve '''raiserror''' (egy „e”-vel), nem raiseerror! Hasonlít a C nyelv printf-jére, itt is adhatunk meg az üzenetbe behelyettesítendő paramétereket (a fenti példában ez a második sorban az 1234). A hibaüzenet utáni első paraméter a severity (súlyosság), értéke: 1-10 között csak hibaüzenet, de megy tovább a program; 11-19 között ha try blokkban keletkezik a hiba, akkor a catch-részbe ugrik a vezérlés, tehát ez már tényleg kivételt dob. A második paraméter a state (állapot), az itt megadott értéket adja vissza az error_state() függvény. Értékkészlete: 1-127. Minden raiserror-nál, ami ugyanolyan hibára vonatkozik, adjunk más értéket a state-nek, mert így könnyebb megtalálni, melyik raiserror dobta a hibát. | A függvény neve '''raiserror''' (egy „e”-vel), nem raiseerror! Hasonlít a C nyelv printf-jére, itt is adhatunk meg az üzenetbe behelyettesítendő paramétereket (a fenti példában ez a második sorban az 1234). A hibaüzenet utáni első paraméter a severity (súlyosság), értéke: 1-10 között csak hibaüzenet, de megy tovább a program; 11-19 között ha try blokkban keletkezik a hiba, akkor a catch-részbe ugrik a vezérlés, tehát ez már tényleg kivételt dob. A második paraméter a state (állapot), az itt megadott értéket adja vissza az error_state() függvény. Értékkészlete: 1-127. Minden raiserror-nál, ami ugyanolyan hibára vonatkozik, adjunk más értéket a state-nek, mert így könnyebb megtalálni, melyik raiserror dobta a hibát. | ||
85. sor: | 85. sor: | ||
− | < | + | <syntaxhighlight lang="sql"> |
create or replace procedure eljaras_neve | create or replace procedure eljaras_neve | ||
(param1_bementi in varchar2, param2_kimeneti out varchar2) | (param1_bementi in varchar2, param2_kimeneti out varchar2) | ||
95. sor: | 95. sor: | ||
tárolt eljárás kódja | tárolt eljárás kódja | ||
end eljaras_neve; | end eljaras_neve; | ||
− | </ | + | </syntaxhighlight> |
==6. Hogyan kell tárolt eljárást létrehozni SQL Serveren?== | ==6. Hogyan kell tárolt eljárást létrehozni SQL Serveren?== | ||
104. sor: | 104. sor: | ||
* https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/06-MS%20SQL%20Server%20programoz%C3%A1s.pdf, 34. dia | * https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/06-MS%20SQL%20Server%20programoz%C3%A1s.pdf, 34. dia | ||
− | < | + | <syntaxhighlight lang="sql"> |
CREATE PROCEDURE eljaras_neve | CREATE PROCEDURE eljaras_neve | ||
@param1 nvarchar(50), | @param1 nvarchar(50), | ||
111. sor: | 111. sor: | ||
AS | AS | ||
sql_utasítások | sql_utasítások | ||
− | </ | + | </syntaxhighlight> |
==7. Definiáld a trigger fogalmát!== | ==7. Definiáld a trigger fogalmát!== | ||
156. sor: | 156. sor: | ||
'''Általános Oracle szintaktika:''' | '''Általános Oracle szintaktika:''' | ||
− | < | + | <syntaxhighlight lang="sql"> |
create or replace trigger trignev | create or replace trigger trignev | ||
{before|after} {insert or update or delete} | {before|after} {insert or update or delete} | ||
166. sor: | 166. sor: | ||
where sorszam = 1; | where sorszam = 1; | ||
end | end | ||
− | </ | + | </syntaxhighlight> |
==10. Csoportosítsd a DML triggereket SQL Serveren (esemény, objektum, időbeliség)!== | ==10. Csoportosítsd a DML triggereket SQL Serveren (esemény, objektum, időbeliség)!== | ||
180. sor: | 180. sor: | ||
'''Általános MS SQL szintaktika:''' | '''Általános MS SQL szintaktika:''' | ||
− | < | + | <syntaxhighlight lang="sql"> |
create trigger | create trigger | ||
on {tablanev|nezetnev} | on {tablanev|nezetnev} | ||
186. sor: | 186. sor: | ||
as | as | ||
if columns_updated() begin ... end | if columns_updated() begin ... end | ||
− | </ | + | </syntaxhighlight> |
-- [[PallosTamas|Velias]] - 2009.02.22. | -- [[PallosTamas|Velias]] - 2009.02.22. |
A lap jelenlegi, 2016. március 20., 21:37-kori változata
Tartalomjegyzék
- 1 1. Add meg az Oracle anonim blokk szerkezetét, jelöld be az opcionális részeket!
- 2 2. Hogyan lehet Oracle szerveren elkapni egy hibát?
- 3 3. Hogyan kell alkalmazás hibát dobni Oracle szerveren?
- 4 4. Hogyan kell alkalmazás hibát dobni SQL Serveren?
- 5 5. Hogyan kell tárolt eljárást létrehozni Oracle szerveren?
- 6 6. Hogyan kell tárolt eljárást létrehozni SQL Serveren?
- 7 7. Definiáld a trigger fogalmát!
- 8 8. Adj meg 3 tipikus feladatot, aminek elvégzésére triggert szoktak írni!
- 9 9. Csoportosítsd a DML triggereket Oracle szerveren (esemény, objektum, időbeliség)!
- 10 10. Csoportosítsd a DML triggereket SQL Serveren (esemény, objektum, időbeliség)!
1. Add meg az Oracle anonim blokk szerkezetét, jelöld be az opcionális részeket!
PL/SQL anonymous blokk szerkezete ([opcionális részek]):
[DECLARE]
BEGIN
--statements
[EXCEPTION]
END;
Forrás: https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/05-Oracle%20Server%20programoz%C3%A1s.pdf, 32. dia
Bővebben: http://psoug.org/reference/anonymous_blocks.html
2. Hogyan lehet Oracle szerveren elkapni egy hibát?
BEGIN
utasítások_sorozata1;
EXCEPTION
WHEN kivétel_név1 THEN
utasítások_sorozata2;
WHEN kivétel_név2 THEN
utasítások_sorozata3;
...
WHEN OTHERS THEN
utasítások_sorozata4;
END;
Forrás: https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/05-Oracle%20Server%20programozás.pdf, 40. dia
Bővebben: http://psoug.org/reference/exception_handling.html
http://www.techonthenet.com/oracle/exceptions/when_others.php
Példa:
exception
when no_data_found then
/* hibakezelés a no_data_found típusú hibára */
3. Hogyan kell alkalmazás hibát dobni Oracle szerveren?
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#sthref2006
raise_application_error(-20001, 'hibauzenet');
A függvény első paramétere a hibakód, negatív egész számnak kell lennie a -20000..-20999 tartományban. A második paraméter egy karaktersorozat, 2048 byte hosszúságig. (Egyébként van egy opcionális harmadik paraméter is, ami TRUE vagy FALSE lehet, alapértelmezett értéke FALSE. Ha ez az érték TRUE, akkor a hiba a stackbe kerül, ha FALSE, akkor a hiba minden korábbi hibát felülír.)
4. Hogyan kell alkalmazás hibát dobni SQL Serveren?
sys.messages
táblában lévő előre definiált hibák küldése- Egyedi hibák
RAISERROR ( { msg_id | msg_str } , severity, state [, argument [, ... n ] ] )
- Severity
- 0…18: Felhasználói
- 19…25: csak sysadmin generálhatja
- 20…25: súlyos hiba, kapcsolatot is lezárja
- State
- Több helyről küldhetjük ugyanazt a hibát
- Helyek azonosítása
- 1…127
Konkrétan:
raiserror('hibauzenet', 16, 1)
raiserror('hibauzenet2, valami szam: %d', 16, 1, 1234)
A függvény neve raiserror (egy „e”-vel), nem raiseerror! Hasonlít a C nyelv printf-jére, itt is adhatunk meg az üzenetbe behelyettesítendő paramétereket (a fenti példában ez a második sorban az 1234). A hibaüzenet utáni első paraméter a severity (súlyosság), értéke: 1-10 között csak hibaüzenet, de megy tovább a program; 11-19 között ha try blokkban keletkezik a hiba, akkor a catch-részbe ugrik a vezérlés, tehát ez már tényleg kivételt dob. A második paraméter a state (állapot), az itt megadott értéket adja vissza az error_state() függvény. Értékkészlete: 1-127. Minden raiserror-nál, ami ugyanolyan hibára vonatkozik, adjunk más értéket a state-nek, mert így könnyebb megtalálni, melyik raiserror dobta a hibát.
Források:
- http://technet.microsoft.com/en-us/library/ms178592.aspx
- https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/06-MS%20SQL%20Server%20programoz%C3%A1s.pdf, 22. dia
5. Hogyan kell tárolt eljárást létrehozni Oracle szerveren?
http://www.techonthenet.com/oracle/procedures.php
create or replace procedure eljaras_neve
(param1_bementi in varchar2, param2_kimeneti out varchar2)
is
/* változók */
valtozo1 number;
valtozo2 int;
begin
tárolt eljárás kódja
end eljaras_neve;
6. Hogyan kell tárolt eljárást létrehozni SQL Serveren?
- MS SQL Server 2000: http://msdn.microsoft.com/en-us/library/aa258259(SQL.80).aspx
- MS SQL Server 2005: http://msdn.microsoft.com/en-us/library/ms187926%28SQL.90%29.aspx
- MS SQL Server 2012: http://msdn.microsoft.com/en-us/library/ms187926(v=sql.110).aspx
- https://www.aut.bme.hu/Upload/Course/VIAUA369/hallgatoi_jegyzetek/06-MS%20SQL%20Server%20programoz%C3%A1s.pdf, 34. dia
CREATE PROCEDURE eljaras_neve
@param1 nvarchar(50),
@param2 float,
@param3 int
AS
sql_utasítások
7. Definiáld a trigger fogalmát!
A triggerek olyan speciális procedúrák egy adatbázisban, amelyek különböző eseményekhez köthetőek. DML Események: INSERT, UPDATE, DELETE. DDL trigger események pl. a CREATE, ALTER, DROP. Továbbá lehetnek rendszeresemények (Logon, Logoff stb.) is. Céljuk pl.:
- Eseménykezelő tárolt eljárás
- Származtatott értékek karbantartása
- Naplózás
- Statisztikák gyűjtése
- Szerverek közti referenciális integritás
8. Adj meg 3 tipikus feladatot, aminek elvégzésére triggert szoktak írni!
- Módosítások feltételhez kötése
- Módosítások auditálása
- Hozzáférés korlátozása
- Redundáns mező értékének kiszámolása (konzisztencia megőrzése)
9. Csoportosítsd a DML triggereket Oracle szerveren (esemény, objektum, időbeliség)!
Objektum: ON table_name
Időbeliség: BEFORE, AFTER
Esemény: INSERT, UPDATE, DELETE
DML események
- insert, update, delete
- Táblához kötődik
objektumok
- utasítás szintű
- sor szintű
ütemezés
- utasítás előtti (utasítás szintű)
- sor módosítás előtti (sor szintű)
- adatmódosítás
- sor módisítás utána
- (minden sorra ez a 3)
- utasítás utána
Általános Oracle szintaktika:
create or replace trigger trignev
{before|after} {insert or update or delete}
on tablanev
[for each row]
[when feltétel]
begin
update tábla set nev = :new.nev
where sorszam = 1;
end
10. Csoportosítsd a DML triggereket SQL Serveren (esemény, objektum, időbeliség)!
Objektum: ON { table | view }
Időbeliség: FOR, AFTER, INSTEAD OF
Esemény: INSERT, UPDATE, DELETE
Általános MS SQL szintaktika:
create trigger
on {tablanev|nezetnev}
{for|after|instead of} {insert,update,delete}
as
if columns_updated() begin ... end
-- Velias - 2009.02.22. -- FlamichTamas - 2009.03.29. -- tsw - 2009.03.29. -- FaPe - 2009.04.07. -- RudolfKing - 2011.03.21. -- Buj - 2012.03.27.