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
Megjegyzés küldése