Informatikai technológiák laboratórium 1 - AUT 1. mérés: Adatbázis szerver oldali programozása

A VIK Wikiből
A lap korábbi változatát látod, amilyen (vitalap) 2012. október 21., 20:36-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoszak|InfTechLaborAUT1}} ==1. Add meg az Oracle anonim blokk szerkezetét, jelöld be az opcionális részeket!== PL/SQL anonymous blokk szerkeze…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


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: 04-Oracle Server programozás.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: 04-Oracle Server programozá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://www.fast-track.cc/t_easyoracle_pl_sql_raise_application_error.htm


raise_application_error(-20001, 'hibauzenet');

A függvény első paramétere a hibakód, negatív számnak kell lennie, 20000-től indul lefelé.

4. Hogyan kell alkalmazás hibát dobni SQL Serveren?

http://technet.microsoft.com/en-us/library/ms178592.aspx


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.

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 2000: http://msdn.microsoft.com/en-us/library/aa258259(SQL.80).aspx

MS SQL 2005: http://msdn.microsoft.com/en-us/library/ms187926%28SQL.90%29.aspx


create procedure eljarars_neve
@param1 nvarchar(50),
@param2 float,
@param3 int
as
  tárolt eljárás kódja

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)!

ON table_name

BEFORE, AFTER

INSERT, UPDATE, DELETE

DML események

  • insert, update, delete
  • Táblához kötődik

objektumok

  • utasítás szintű
  • sor szintű

ütemezés

  1. utasítás előtti (utasítás szintű)
    1. sor módosítás előtti (sor szintű)
    2. adatmódosítás
    3. sor módisítás utána
    4. (minden sorra ez a 3)
  2. 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 }

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.