Adatbázisok szerver oldali programozása Labor, 2006.04.18.

A VIK Wikiből
A lap korábbi változatát látod, amilyen 2001:738:2001:2078:0:208:37:0 (vitalap) 2013. március 31., 19:03-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|AdatbServerProgJegyzet20060418}} <!-- * Set DENYTOPICVIEW = TWikiGuest --> <style> code.pre { white-space: pre; display: block; m…”)
(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


<style> code.pre { white-space: pre; display: block; margin-top: 2px; margin-bottom: 2px; } li { line-height: 18px; } </style>


<< Labor, 2006.04.18. >>

Dinamikus SQL

  1. Hozz létre egy csomagot, amiben a gyakorlat során elkészítendő feladatokat fogod megvalósítani!
  2. Írj egy tárolt eljárást, ami egy tábla sorait törli ki. Az eljárás bemenete a tábla neve és a törlend( sorokat definiáló feltétel legyen. Amennyiben nincs megadva feltétel, az eljárás a bemenetként kapott tábla összes sorát törölje. Az eljárást próbáld is ki! CREATE OR REPLACE PACKAGE dynasql IS PROCEDURE deletefrom(tablename VARCHAR2, condition VARCHAR2); END dynasql; CREATE OR REPLACE PACKAGE BODY dynasql IS PROCEDURE deletefrom(tablename VARCHAR2, condition VARCHAR2) IS query VARCHAR2(500); BEGIN query := 'DELETE FROM ' ||| tablename |||| ' WHERE ' || NVL(condition, '0=0'); DBMS_OUTPUT.PUT_LINE(query); EXECUTE IMMEDIATE query; END; END dynasql;

    EXEC dynasql.deletefrom('exam', 'ex_id=6');

  3. Hozz létre egy típust, amiben tetszőleges számú tábla nevét tudod majd tárolni!
  4. Írj egy tárolt eljárást, aminek bemenő paramétere táblák neveinek tömbje, feladata pedig, hogy kitörölje a bemenetként megkapott táblákat. A sikeres vagy sikertelen törlésekről a kimenetre írj üzenetet. Dobj hibát, amennyiben nem lehet az összes táblát kitörölni, mert esetleg a listából hiányzik egy olyan tábla, ami hivatkozik egy listabeli táblára. CREATE OR REPLACE PACKAGE dynasql IS TYPE tablalista IS TABLE OF VARCHAR2(30); PROCEDURE droptables(tables tablalista); END dynasql; CREATE OR REPLACE PACKAGE BODY dynasql IS tablanemletezik EXCEPTION; tablanemtorolheto EXCEPTION;   PRAGMA EXCEPTION_INIT(tablanemletezik, -00942); PRAGMA EXCEPTION_INIT(tablanemtorolheto, -02449);   PROCEDURE droptables(tables tablalista) IS query VARCHAR2(500); torolve INT := 0; BEGIN FOR i IN tables.FIRST..tables.LAST LOOP FOR i IN tables.FIRST..tables.LAST LOOP BEGIN query := 'DROP TABLE ' | tables(i); EXECUTE IMMEDIATE query; torolve := torolve+1; DBMS_OUTPUT.PUT_LINE('Törölve: ' | tables(i)); EXCEPTION WHEN tablanemletezik THEN DBMS_OUTPUT.PUT_LINE('Nem létezik: ' | tables(i)); WHEN tablanemtorolheto THEN DBMS_OUTPUT.PUT_LINE('Nem törölhető: ' | tables(i)); END; END LOOP; END LOOP; IF torolve<tables.COUNT THEN RAISE_APPLICATION_ERROR(-20100, 'Nem sikerült minden táblát törölni'); END IF; END; END dynasql; DECLARE t dynasql.tablalista; BEGIN t:=dynasql.tablalista('felkesz', 'anyag', 'felkesz_anyag'); dynasql.droptables(t); END;

-- Peti - 2006.04.18.