Ugrás a fő tartalomra

APEX kezdő alkalmazás készítése 2.

SQL utasítások futtatása APEX alkalmazásból


Dinamikus SQL utasítás

A dinamikus SQL segítségével általános célú eljárásokat hozhatunk létre, valamint PL/SQL-ben DDL valamint bizonyos DML utasításokat hajthatunk végre.

A dinamikus SQL utasítások fordítási idő helyett futási időben jönnek létre. Használhatjuk névtelen blokkban, tárolt eljárásokban, csomagokban.

Az adatbázis az alapértelmezett adatbázistól különböző adatbázis-kezelést biztosító felülettől kapja: hivatkozási változót, mint paramétert. A hivatkozási változót a fejlesztési felülettől kapja, és esetleg oda kell az eredményt visszaadni.

A gazdakörnyezeti változóra a dinamikus SQL ben kettősponttal hivatkozunk, a végrehajtó utasításban pedig sztring lehet.

A rendszer elemzi a megadott SQL utasítást, az elemzés után előállítja az utasítás végrehajtható formáját, majd az utasítás lefut.
A rendszer futás után megsemmisíti az utasítás alapján előállított végrehajtható alakot. Tehát egyszer használatos utasítás esetén célszerű így használni. A többszöri végrehajtás esetén célszerű a PREPARE utasítás használatával előkészíteni az EXECUTE utasítást.(ezt célszerű nem Oracle fejlesztői környezetben használni)

A dinamikus SQL utasítás beépíthető a programokba úgy, hogy karakteres sztringként tároljuk az utasításokat. A paraméterek pedig futási időben definiálódnak. Fontos megjegyezni, hogy a sztring valódi SQL utasítást vagy PL/SQL kódot tartalmaz.

Dinamikus SQL utasítás az EXECUTE IMMEDIATE utasítás.

Általános alakja:
EXECUTE IMMEDIATE dinamikus_SQL_sztring
[INTO definiált_változo1, definiált_változo2,...]
[USING [IN|OUT|IN OUT] paraméter1,paraméter2,...]
[RETURNING INTO | RETURN paraméter1,paraméter2,...];


Értelmezése :
- INTO záradék azokat az előre definiált változókat tartalmazza, amelyek a SELECT utasítás visszatérő adati. (Hasonló, mint a statikus SELECT INTO utasítás.)
- A USING záradék a hivatkozási paraméterek listáját tartalmazza, amely lehet 3 féle IN, OUT és IN OUT típusú. Alapértelmezés az IN típus.
- Végül pedig a RETURNING INTO  vagy RETURN záradék. Amely az SQL vagy PL/SQL blokk végrehajtása utáni, hivatkozott paraméter eltárolt értékeit tartalmazza. Hason-ló a USING záradékhoz.

Amennyiben interaktívan akarjuk használni a dinamikus SQL-t, akkor kettősponttal hivatkozunk a változóra (pl. :valtozo).

Jobb megoldás, ha paraméterezetten használjuk. Ekkor a paraméterek sorszámát adjuk meg a SELECT utasításban, és a USING záradék után írjuk a paraméter listát, amelynek első eleme a SELECT utasítás hivatkozásában: 1 lesz.

Egyik nagy előnye a dinamikus SQL utasításnak, hogy hozzárendelt változókat használhatunk.

- Módosítási művelet

Az UPDATE utasítás PL/SQL esetén ugyanúgy működik mint az SQL UPDATE utasítás, annyi különbséggel hogy itt a WHERE utasításrészben megadható egy CURRENT OF opció, amely csak a megadott kurzor utoljára lehívott sorát módosítja. (Ilyenkor a kurzorban meg kell adni a FOR UPDATE utasításrészt.
Kiegészülhet opcionálisan a RETURNING INTO utasításrésszel. A RETURNING utasításrészben felsoroljuk azokat az adatElemeket (oszlopneveket), amelyek  értéke megváltozik az utasítás által módosított sorokban.

Csak skalár és REF típusú értéket tudunk így betölteni. Az adatElem PL/SQL változó, vagy hoz-zárendelt változó lehet.

Az INTO záradékban veszi fel ezt az értéket. Ilyenkor az EXECUTE IMMEDIATE utasításnál is használjuk a USING utasításrészben a RETURNING INTO változónév záradékot.

Az utasítás szintaktikája a következő :
UPDATE { minősített táblanév | allekérdezés}
  SET {oszlop = {kifejezés| allekérdezés} |DEFAULT },ez ismétlőd-het...
  [WHERE {feltétel | CURRENT OF kurzor} ]
  [RETURNING ( oszlopnév1 [,oszlopnév2]...)
    INTO (változónév1 [,változónév2]...) ]



-  OPEN-FOR, FETCH, CLOSE utasítások használata

Dinamikus SQL használata több sort visszaadó SELECT utasítás esetén. E használat elve hasonló a statikus kurzorokéhoz.
Tehát először a kurzorváltozót kell deklarálni, aztán meg kell nyitni a kurzort a belépési pontnál úgy, hogy az első sort adja vissza az eredményhalmaz számára, majd lehívjuk a második sort és így tovább. Végül, ha minden sor részt vett a folyamatban bezárjuk a kur-zort.

- KURZORVÁLTOZÓK

Az Explicit kurzorhoz hasonlóan a kurzorváltozó is egy halmaz, amely a tábla valamelyik sorának feldolgozására alkalmas. Amíg a statikus kurzor egyetlen a fordításkor ismert SELECT utasítás eredményét tartalmazza, addig a kurzorváltozó dinamikus. Ez azt jelenti, hogy futási időben a kurzorváltozóhoz bármely típus kompatibilis kérdés kapcsolható.

A kurzorváltozó használata megfelel a statikus kurzor használatának, tehát deklaráció, meg-nyitás, egy-egy sor betöltése, majd bezárás.

A kurzorváltozó referencia típusú változó, és mindig a hivatkozott sor címét tartalmazza.
A kurzorváltozó deklarálása két lépésben történik.

Első a kurzorváltozó típus létrehozása, majd ezután a kurzorváltozó deklarálása következik kurzorváltozó típussá.


Kurzorváltozó típus általános alakja :

TYPE név IS REF CURSOR [RETURN
{ táblanév | kurzor_név | kurzorváltozó_név|%ROWTYPE | rekord-név%TYPE |
   Rekordtípusnév | kurzorreferenciatipus_név}]

Beszélhetünk erős kurzorreferencia típusról, ekkor a RETURN utasítás szerepel (visszaté-rési értéke egy rekord_típus), vagy gyenge kurzorreferencia típusról, amikor  nem szerepel a RETURN utasítás a típusdeklarációban.

Jelen esetben gyenge kurzorreferenciát használunk. A REF CURSOR kulcsszó azt ered-ményezi, hogy az új típus egy pointer lesz, ami a definiált típusra mutat.


Kurzor megnyitása 
OPEN kurzorváltozó FOR dinamikus_SQL_sztring
[USING  param1, param2,…]

A kurzorváltozó egy gyenge REF CURSOR típus, míg a dinamikus_SQL_sztring egy olyan sztring, amely tartalmazza a több sort visszaadó lekérdezést.


Az utasításkód kiolvasása (FETCH)

FETCH kurzorváltozó
  INTO PL/SQL_válozó1, PL/SQL_változó2,...
EXIT WHEN kurzorváltozó%NOTFOUND;

A kurzor bezárása
CLOSE kurzorváltozó;


- APEX rendszer feliratok magyarítása
Az alkalmazásunk hiányosságának tekinthető, hogy minden felirat angol nyelvű. Változtassuk meg magyarra.
Először a Riport (első) lapon megjelenő tábla oszlopnevei legyenek magyar feliratúak. Kattintsunk a Riport lap Lapszerkesztő ablakában az Alkalmazott hiperlinkre a tartományok (Regions) részben, (vagy a report hiperlinkre).

Az így meg-jelenő lap Report Attributes fülére kattintva, a Custom menüpont kijelölése után az összes fejlécet átírhatjuk magyarra.

Változtassuk meg az attribútumok sorrendjét is a fel és lefelé mutató nyilakkal, majd Apply Changes. Így megkaptuk a magyar feliratú táblát az első (Riport) lapon.

Az Űrlapon (Form) lapon az elemek (Items) neveit (Label) kell megváltoztatnunk.
Numerikus mezők hosszát vegyük kisebbre, és a számot igazítsuk balra.



Hitelesítés és engedélyezés

(Hitelesítés=Authentication, Engedélyezés=authorizatiton)
Az alkalmazás létrehozásánál választanunk kell a felhasználók alkalmazás-használati jogait beállító hitelesítési osztályok, más néven autentikációs sémák (Authentication Scheme) közül.

A hitelesítési osztályok segítségével állíthatjuk be például a belépési lehetőségeket.


Egy alkalmazás létrehozásakor  háromféle autentikációs séma adható meg:
- No authentication: Az e sémával létrehozott alkalmazás futtatása nincs semmi-lyen módon korlátozva; felhasználói név és jelszó nélkül lehet elindítani az alkalma-zást.
- Database Account: Csak rendszer-adminisztrátori (Administration\Data-base Users) szinten már definiált (létrehozott) felhasználók indíthatják el az al-kalmazást. (E lehetőséggel tehát az Apex-felhasználók (lásd később) sem rendelkez-nek.) Ezt a továbbiakban adatbázis-belépésnek fogjuk nevezni.
- Application Express Authentication: Az alkalmazásba a létrehozó fel-használón kívül csak az ő általa apex felhasználóként létrehozott felhasználók (lásd később) indíthatják el az alkalmazást. (E lehetőséggel tehát a létrehozó felhasználón kívül a rendszer-adminisztrátori szinten definiált többi felhasználó sem rendelkezik.) Ezt röviden csak Apex-autentikációnak nevezzük.

Az eddigiekben elkészített alkalmazásaink mindegyike Apex-autentikációjú volt. Az alábbiakban megmutatjuk, hogy miként lehet további felhasználókat létrehozni, akik az apex autentikációjú alkalmazásokat használni (futtatni, illetve az APEX fejlesztői környezetben módosítani is) tudják.
Az Apex-fejlesztő lehet adminisztrátor, fejlesztő és végfelhasználó.


Engedélyezési osztály létrehozása (Authorization Schema)


Ahhoz, hogy létre tudjuk hozni az engedélyezési mintát, tudnunk kell, hogyan hivatkozhatunk
a felhasználókra, a felhasználói csoportokra.
- Az alkalmazásban az apex fejlesztő környezet eltárolja a felhasználó nevét
    egy APP_USER nevű globális változóban.
- Az Oracle adatbázis-kezelő a felhasználókat a wwv_flow_users táblában tárolja el.
    A tábla lekérdezhető.
- A felhasználói csoportokat a wwv_flow_group_users táblában tárolja el.
    Ez a tábla is lekérdezhető.







Megjegyzések