8 Dinamikus SQL

A dinamikus SQL egy olyan programozási technika, amely lehetővé teszi az SQL utasítások dinamikus felépítését futás közben. Dinamikus SQL használatával általánosabb célú, rugalmas alkalmazásokat hozhat létre, mivel az SQL utasítás teljes szövege ismeretlen lehet a fordítás során. Például a dinamikus SQL lehetővé teszi egy olyan eljárás létrehozását, amely egy olyan táblán működik, amelynek neve csak futásig ismert.

Az Oracle korábbi kiadásaiban a dinamikus SQL PL / SQL alkalmazásban történő megvalósításának egyetlen módja az volt, hogy a DBMS_SQL csomag használatával. Az Oracle8i natív dinamikus SQL-t vezet be, amely a DBMS_SQL csomag alternatívája. A natív dinamikus SQL használatával dinamikus SQL utasításokat közvetlenül elhelyezhet PL / SQL blokkokban.

Ez a fejezet a következő témákat fedi le:

  • Mi az a dinamikus SQL?
  • Mikor érdemes dinamikus SQL-t használni
  • Dinamikus SQL-forgatókönyv natív dinamikus SQL használatával
  • Natív dinamikus SQL és a DBMS_SQL csomag
  • alkalmazás Fejlesztési nyelvek, kivéve PL / SQL

Mi a dinamikus SQL?

A dinamikus SQL lehetővé teszi olyan SQL utasításokra hivatkozó programok írását, amelyek teljes szövege futásig nem ismert. Mielőtt részletesen megvitatnánk a dinamikus SQL-t, a statikus SQL egyértelmű meghatározása jó kiindulópontot jelenthet a dinamikus SQL megértéséhez. A statikus SQL utasítások végrehajtásról végrehajtásra nem változnak. A statikus SQL utasítások teljes szövege ismert a fordítás során, amely a következő előnyökkel jár:

  • A sikeres fordítás ellenőrzi, hogy az SQL utasítások érvényes adatbázis-objektumokra hivatkoznak-e.
  • A sikeres fordítás ellenőrzi, hogy a szükséges jogosultságok rendelkezésre állnak-e az adatbázis-objektumok eléréséhez.
  • A statikus SQL teljesítménye általában jobb, mint a dinamikus SQL.

Ezen előnyök miatt csak akkor használjon dinamikus SQL-t, ha a statikus SQL-t nem tudja elérni céljainak megvalósításához, vagy ha a statikus SQL használata nehézkes a dinamikus SQL-hez képest. A statikus SQL-nek azonban vannak korlátai, amelyeket a dinamikus SQL segítségével lehet legyőzni. Nem biztos, hogy mindig tudja az SQL utasítások teljes szövegét, amelyeket PL / SQL eljárásban kell végrehajtani. A program elfogadhat olyan felhasználói adatbevitelt, amely meghatározza az végrehajtandó SQL utasításokat, vagy a programnak szüksége lehet néhány feldolgozási munkára, hogy meghatározza a helyes műveletet. Ilyen esetekben dinamikus SQL-t kell használnia.

Vegyünk például egy jelentési alkalmazást, amely szabványos lekérdezéseket hajt végre olyan adattárházi környezetek tábláin, ahol a pontos táblanév futásig nem ismert. Az adattárházban található nagy mennyiségű adat hatékony elhelyezéséhez minden negyedévben új táblázatot kell létrehoznia a negyedéves számlaadatok tárolásához. Ezeknek a táblázatoknak pontosan ugyanaz a meghatározása, és a negyedév kezdő hónapjának és évének megfelelően nevezik őket, például INV_01_1997, INV_04_1997, INV_07_1997, INV_10_1997, INV_01_1998 stb. Ilyen esetben használhat dinamikusat SQL a jelentési alkalmazásban a tábla nevének futás közbeni megadásához.

Statikus SQL esetén az összes adatmeghatározási információt, például a táblázat meghatározásait, amelyekre a program SQL utasításai hivatkoznak, ismerni kell a fordítás során. Ha az adatdefiníció megváltozik, meg kell változtatnia és újrafordítania a programot. A dinamikus SQL programok képesek kezelni az adatdefiníciós információk változását, mert az SQL utasítások futás közben “menet közben” változhatnak. Ezért a dinamikus SQL sokkal rugalmasabb, mint a statikus SQL. A dinamikus SQL lehetővé teszi újrafelhasználható alkalmazáskód megírását, mivel a kód meghatároz egy folyamatot, amely független a felhasznált SQL utasításoktól.

Ezenkívül a dinamikus SQL lehetővé teszi olyan statikusan nem támogatott SQL utasítások végrehajtását is SQL programok, például adatmeghatározási nyelv (DDL) utasítások. Ezeknek az állításoknak a támogatásával többet érhet el a PL / SQL programjaival.

Megjegyzés:

A dinamikus SQL programok kifejezés olyan programokat jelent, amelyek dinamikus SQL-t tartalmaznak; az ilyen programok tartalmazhatnak statikus SQL-t is. A statikus SQL programok azok a programok, amelyek csak statikus SQL-t tartalmaznak, és nem tartalmaznak dinamikus SQL-t.

Mikor kell használni a dinamikus SQL-t

Akkor használjon dinamikus SQL-t, ha a statikus SQL nem támogatja a végrehajtani kívánt művelet, vagy olyan esetekben, amikor nem ismeri azokat a pontos SQL utasításokat, amelyeket egy PL / SQL eljárásnak kell végrehajtania. Ezek az SQL utasítások függhetnek a felhasználói beviteltől, vagy a program által végzett feldolgozási munkától. A következő szakaszok leírják azokat a tipikus helyzeteket, amikor dinamikus SQL-t kell használni, és tipikus problémákat, amelyek megoldhatók a dinamikus SQL használatával.

Dinamikus DML-utasítások végrehajtása

Dinamikus SQL-t használhat végrehajtásra DML utasítások, amelyekben a pontos SQL utasítás futásig nem ismert.Példákért tekintse meg a “Példák a DBMS_SQL csomagkódra és a natív dinamikus SQL kódra” és a “Példa a DML műveletekre” című DML példákat.

A Statikus SQL által nem támogatott utasítások végrehajtása a PL / SQL

PL / SQL-ben nem lehet a következő típusú utasításokat végrehajtani statikus SQL használatával:

  • Adatmeghatározási nyelv (DDL) utasítások, például CREATE, DROP, GRANT és REVOKE
  • Munkamenet-vezérlő nyelv (SCL) utasítások, például ALTER SESSION és SET ROLE
    Lásd még:

    Oracle8i SQL Reference a DDL és SCL utasításokkal kapcsolatos információkért.

Használjon dinamikus SQL-t, ha az ilyen típusú utasítások bármelyikét egy PL-ben kell végrehajtania / SQL blokk.

Ezenkívül a statikus SQL a PL / SQL-ben nem teszi lehetővé a TABLE záradék használatát a SELECT állítások. A dinamikus SQL-ben nincs ilyen korlátozás. Például a következő PL / SQL blokk tartalmaz egy SELECT utasítást, amely a TABLE záradékot és a natív dinamikus SQL-t használja:

Dinamikus lekérdezések végrehajtása

A dinamikus SQL használatával olyan alkalmazásokat hozhat létre, amelyek dinamikus lekérdezéseket hajtanak végre, amelyek olyan kérdések, amelyek teljes szövege futásig nem ismert. Sok típusú alkalmazásnak dinamikus lekérdezéseket kell használnia, ideértve a következőket:

  • Olyan alkalmazások, amelyek lehetővé teszik a felhasználók számára, hogy futás közben adjanak meg vagy választhassanak lekérdezési keresési vagy rendezési feltételeket
  • Olyan alkalmazások, amelyek lehetővé teszik a felhasználók számára a bevitelt vagy válasszon optimalizálói tippeket futás közben
  • Olyan alkalmazások, amelyek lekérdeznek egy adatbázist, ahol a táblák adatmeghatározásai folyamatosan változnak
  • Olyan alkalmazások, amelyek lekérdeznek egy adatbázist, ahol gyakran új táblákat hoznak létre

Példákért lásd: “Lekérdezési példa”, és tekintse meg a lekérdezési példákat a “Dinamikus SQL-forgatókönyv natív dinamikus SQL használatával” részben.

Olyan adatbázis-objektumok hivatkozására, amelyek nem léteznek a fordítás során

Sokféle alkalmazásnak kölcsönhatásba kell lépnie az időszakosan létrehozott adatokkal. Lehetséges például az adatbázis-táblák definíciójának meghatározása a fordításkor, de a táblák neve nem, mivel időszakosan új táblákat generálnak. Az alkalmazásnak hozzáférnie kell az adatokhoz, de a táblázatok pontos nevét futásig nem lehet tudni.

A dinamikus SQL megoldhatja ezt a problémát, mert a dinamikus SQL lehetővé teszi, hogy futásig várjon a táblázatnevek, amelyekhez hozzáférnie kell. Például a „Mi az a dinamikus SQL?” Témában tárgyalt minta adattárház alkalmazásban minden negyedévben új táblák jönnek létre, és ezeknek a tábláknak mindig ugyanaz a meghatározása. Ebben az esetben megengedheti a felhasználónak, hogy futás közben adja meg a tábla nevét a következőhöz hasonló dinamikus SQL lekérdezéssel:

A futtatás dinamikus optimalizálása

Ha statikusat használ SQL, az összeállítás során el kell döntenie, hogyan szeretné összeállítani az SQL utasításokat, hogy tartalmaznak-e tippeket az utasításaiban, és ha tartalmaz tippeket, akkor pontosan melyik tippeket kell megadnia. A dinamikus SQL segítségével azonban létrehozhat egy SQL utasítást oly módon, hogy optimalizálja a végrehajtást és / vagy dinamikusan összefűzze a tippeket SQL utasítássá. Ez lehetővé teszi a tippek módosítását az aktuális adatbázis-statisztikák alapján, újrafordítás nélkül.

Például a következő eljárás a a_hint nevű változót használja a felhasználók engedélyezésére. tipp opció átadása a SELECT utasításnak:

Ebben a példában a felhasználó a következő értékek bármelyikét átadhatja a a_hint:

Dinamikus PL / SQL blokkok meghívása

Használhatja a EXECUTE IMMEDIATE utasítás névtelen PL / SQL blokkok meghívására. A dinamikus PL / SQL blokkok meghívásának képessége hasznos lehet az alkalmazásbővítésnél és a testreszabásnál, ahol a futtatandó modult futás közben dinamikusan határozzák meg.

Tegyük fel például, hogy olyan alkalmazást szeretne írni, amely eseményt vesz igénybe számot és az esemény kezelőjéhez történő elküldést. A kezelő neve EVENT_HANDLER_ event_num formátumú, ahol az event_num az esemény száma. Az egyik megközelítés az lenne, ha a diszpécsert kapcsoló utasításként valósítanák meg, az alábbiak szerint, ahol a kód minden eseményt úgy kezel, hogy statikus hívást kezdeményez a megfelelő kezelőjének.

Ez a kód nem túl bővíthető, mert a diszpécser kódja frissíteni kell, amikor egy új esemény kezelőjét hozzáadják. A natív dinamikus SQL használatával azonban az alábbihoz hasonló kiterjeszthető esemény-diszpécsert írhat:

Dinamikus műveletek végrehajtása az Invoker-Rights használatával

Az invoker-rights szolgáltatás dinamikus használatával SQL, létrehozhat olyan alkalmazásokat, amelyek dinamikus SQL utasításokat adnak ki az invoker privilégiumaival és sémájával.Ez a két szolgáltatás, az invoker-jogok és a dinamikus SQL lehetővé teszi olyan újrafelhasználható alkalmazás-alkomponensek felépítését, amelyek képesek működni és elérni az invoker adatait és moduljait.

Lásd még:

PL / SQL felhasználói kézikönyv és útmutató az invoker-jogok és a natív dinamikus SQL használatáról.

Dinamikus SQL-forgatókönyv natív dinamikus SQL használatával

Az ebben a szakaszban ismertetett forgatókönyv bemutatja a hatékonyságot és a rugalmasságot natív dinamikus SQL. Ez a forgatókönyv olyan példákat tartalmaz, amelyek bemutatják, hogyan hajtsa végre a következő műveleteket natív dinamikus SQL használatával:

  • DDL és DML műveletek végrehajtása
  • Egysoros és többsoros lekérdezések végrehajtása

Adatmodell

A jelen forgatókönyvben szereplő adatbázis a vállalat emberi erőforrás-adatbázisa (hr néven) a következő adatmodellel :

A offices nevű főtábla tartalmazza az összes vállalat helyének listáját. A offices táblázat a következő definícióval rendelkezik :

Column Name Null? Type LOCATION NOT_NULL VARCHAR2(200)

Több emp_ helytábla tartalmazza az alkalmazottak adatait, ahol a hely annak a városnak a neve, ahol az iroda található Például egy emp_houston nevű tábla a vállalat Houstoni irodájának alkalmazotti adatait tartalmazza, míg az emp_boston nevű tábla alkalmazottat tartalmaz információk a cég bostoni irodájához.

Mindegyik emp_ helytábla a következő definícióval rendelkezik:

A következő szakaszok különféle natív dinamikus SQL műveleteket írnak le, amelyek a hr adatokon hajthatók végre. adatbázis.

Minta DML művelet

A következő natív dinamikus SQL eljárás emelést ad minden adott munkakörrel rendelkező alkalmazottnak:

DDL művelet minta

A EXECUTE IMMEDIATE utasítás DDL műveleteket hajthat végre. Például a következő eljárás hozzáad egy irodahelyet:

A következő eljárás törli az irodai helyet:

Dinamikus egysoros lekérdezés minta

A EXECUTE IMMEDIATE utasítás dinamikus egysoros lekérdezéseket hajthat végre. Megadhat kötési változókat a USING záradékban, és behívhatja az eredményül kapott sort a utasítás INTO záradékában megadott célba.

A következő függvény beolvassa az adott helyszínen egy adott munkát végző alkalmazottak számát:

Dinamikus többsoros lekérdezés

A OPEN-FOR, FETCH és CLOSE utasítások dinamikus többsoros lekérdezéseket hajthatnak végre. Például a következő eljárás felsorolja az összes alkalmazottat, akik egy adott munkával rendelkeznek egy adott helyen:

Natív dinamikus SQL és a DBMS_SQL csomag

Az Oracle két módszert kínál a dinamikus SQL használatára a PL / SQL-en belül: natív dinamikus SQL és a DBMS_SQL csomag. A natív dinamikus SQL segítségével dinamikus SQL utasításokat helyezhet közvetlenül a PL / SQL kódba. Ezek a dinamikus utasítások tartalmaznak DML utasításokat (beleértve a lekérdezéseket), PL / SQL névtelen blokkokat, DDL utasításokat, tranzakcióvezérlő utasításokat és munkamenet-vezérlő utasításokat.

A legtöbb natív dinamikus SQL utasítás feldolgozásához használja a EXECUTE IMMEDIATE utasítás. Többsoros lekérdezés (SELECT utasítás) feldolgozásához azonban a OPEN-FOR, FETCH, és CLOSE utasítások.

Megjegyzés:

A natív dinamikus SQL használatához a COMPATIBLE inicializálási paramétert 8.1.0 vagy újabb értékre kell állítani. Az COMPATIBLE paraméterről az Oracle8i Migration című részben olvashat.

A DBMS_SQL csomag egy PL / SQL könyvtár, amely programozási API-t kínál a dinamikusan hajtsa végre az SQL utasításokat. A DBMS_SQL csomag programozott interfészekkel rendelkezik a kurzor megnyitásához, a kurzor elemzéséhez, kötések megadásához stb. A DBMS_SQL csomagot használó programok hívást kezdeményeznek dinamikus SQL műveletek végrehajtásához.

A következő szakaszok részletes információkat nyújtanak mindkét módszer előnyeiről.

Lásd még:

A PL / SQL felhasználói kézikönyve és a részletes információk a natív dinamikus SQL használatáról és az Oracle8i által szállított PL / SQL csomagok referenciája a DBMS_SQL csomag. A PL / SQL felhasználói kézikönyvében a natív dinamikus SQL-t egyszerűen dinamikus SQL-nek nevezik.

A natív dinamikus SQL előnyei

A natív dinamikus SQL a következő előnyöket nyújtja a DBMS_SQL csomag:

Könnyű használat

A natív dinamikus SQL használata sokkal egyszerűbb, mint a DBMS_SQL csomag.Mivel a natív dinamikus SQL integrálva van az SQL-be, ugyanúgy használhatja, mint a statikus SQL-t a PL / SQL-kódon belül. Ezenkívül a natív dinamikus SQL kód általában kompaktabb és olvashatóbb, mint az egyenértékű kód, amely a DBMS_SQL csomagot használja.

A DBMS_SQL csomag használata nem olyan egyszerű, mint a natív dinamikus SQL. Számos olyan eljárás és funkció van, amelyet szigorú sorrendben kell használni. Az egyszerű műveletek végrehajtásához általában nagy mennyiségű kód szükséges, amikor a DBMS_SQL csomagot használja. Ezt a bonyolultságot elkerülheti natív dinamikus SQL használatával.

A 8-1. Táblázat bemutatja az ugyanazon művelet végrehajtásához szükséges kód mennyiségének különbségét a DBMS_SQL csomag és natív dinamikus SQL.

8-1. táblázat: A DBMS_SQL csomag és a natív dinamikus SQL kód összehasonlítása

Teljesítményjavítások

A natív dinamikus SQL teljesítménye PL / SQL-ben összehasonlítható a statikus SQL teljesítményével, mert a PL / SQL tolmács beépített támogatást nyújt a natív dinamikus SQL számára. Ezért a natív dinamikus SQL-t használó programok teljesítménye sokkal jobb, mint a DBMS_SQL csomagot használó programok teljesítménye. A natív dinamikus SQL utasítások általában 1,5–3-szor jobban teljesítenek, mint a DBMS_SQL csomagot használó egyenértékű utasítások. Természetesen a teljesítménynövekedés az alkalmazástól függően változhat.

A DBMS_SQL csomag egy eljárási API-n alapul, és ennek következtében magas eljárási hívás és adatmásolási költségekkel jár. Például minden egyes változó megkötésekor a DBMS_SQL csomag átmásolja a PL / SQL kötési változót a helyére, hogy később a végrehajtás során felhasználhassa. Hasonlóképpen, minden alkalommal, amikor egy lekérést végrehajt, először az adatokat átmásolja a DBMS_SQL csomag által kezelt helyre, majd a lekérett adatokat egyenként, egy oszlopba másolja. PL / SQL változók, ami jelentős többletet eredményez az adatmásolásból. Ezzel szemben a natív dinamikus SQL a művelet előkészítési, összerendelési és végrehajtási lépéseit egyetlen műveletbe csomagolja, ami minimalizálja az adatmásolást és az eljáráshívás általános költségeit, és javítja a teljesítményt.

Teljesítménytipp

A natív dinamikus SQL vagy a DBMS_SQL csomag használatakor javíthatja a teljesítményt a kötési változók használatával, mert a bekötési változók használatával az Oracle egyetlen kurzort oszthat meg több SQL utasításhoz.

Például a következő natív dinamikus SQL-kód nem használ kötési változókat:

Minden egyes különálló my_deptno változóhoz új kurzor jön létre, amely erőforrás-versenyt és gyenge teljesítményt okozhat. Ehelyett kösse be a my_deptno -t kötési változóként, mint a következő példában:

Itt ugyanazt a kurzort újra felhasználja a bind my_deptno, ezáltal javítva a teljesítményt és a méretezhetőséget.

A felhasználó által definiált típusok támogatása

A natív dinamikus SQL támogatja a statikus SQL által támogatott összes típust a PL / SQL. Ezért a natív dinamikus SQL támogatja a felhasználó által definiált típusokat, például a felhasználó által definiált objektumokat, gyűjteményeket és REFs. A DBMS_SQL csomag nem támogatja ezeket a felhasználó által definiált típusokat.

Megjegyzés:

A DBMS_SQL csomag korlátozott támogatást nyújt a tömbökhöz. További információ az Oracle8i által biztosított PL / SQL csomagok kézikönyvében található.

A rekordok beolvasásának támogatása

A natív dinamikus SQL és a statikus SQL egyaránt támogatja a rekordokba való beolvasást, de A DBMS_SQL csomag nem. A natív dinamikus SQL használatával a lekérdezés eredményeként kapott sorok közvetlenül betölthetők PL / SQL rekordokba.

A következő példában a lekérdezés sorai a emp_rec record:

A DBMS_SQL csomag előnyei

A DBMS_SQL csomag a következő előnyöket nyújtja a natív dinamikus SQL-hez képest:

Ügyféloldali programok támogatása

Jelenleg a DBMS_SQL csomag támogatott az ügyféloldali programokban, de a natív dinamikus SQL nem. A DBMS_SQL csomag minden hívása az ügyféloldali programból PL / SQL távoli eljáráshívássá (RPC) fordul; ezek a hívások akkor fordulnak elő, amikor változót kell kötni, változót definiálni vagy utasításokat végrehajtani.

A DESCRIBE támogatása

A DESCRIBE_COLUMNS eljárás a DBMS_SQL csomagban használható: írja le az DBMS_SQL keresztül megnyitott és elemzett kurzor oszlopait. A funkcionalitás hasonló az SQL * Plus DESCRIBE parancsához. A natív dinamikus SQL nem rendelkezik DESCRIBE lehetőséggel.

A tömeges dinamikus SQL támogatása

A tömeges SQL több adatsor feldolgozásának lehetősége egyetlen DML utasításban. A tömeges SQL javítja a teljesítményt azáltal, hogy csökkenti az SQL és a gazdagép nyelv közötti váltás mértékét. Jelenleg a DBMS_SQL csomag támogatja a tömeges dinamikus SQL-t.

Bár a natív dinamikus SQL-ben nincs közvetlen támogatás a tömeges műveletekhez, szimulálhat egy natív dinamikus tömeges SQL-t utasítás azáltal, hogy a tömeges SQL utasítást egy “BEGINEND” blokkba helyezi, és a blokkot dinamikusan végrehajtja. Ez a megoldás lehetővé teszi a tömeges SQL előnyeinek kiaknázását egy natív dinamikus SQL programban. Például a következő natív dinamikus SQL-kód másolja az egyik tábla ename oszlopát a másikba:

Több soros frissítés és törlés RETURNING záradékkal

A DBMS_SQL csomag olyan RETURNING záradékkal rendelkező utasításokat támogat, amelyek több sort frissítenek vagy törölnek. A natív dinamikus SQL csak egy RETURNING záradékot támogat, ha egyetlen sort ad vissza.

Lásd még:

“DML visszatérő példa” DBMS_SQL csomagkód és natív dinamikus SQL-kód, amely RETURNING záradékot használ.

32 KB-nál nagyobb SQL-utasítások támogatása

A DBMS_SQL a csomag 32KB-nál nagyobb SQL utasításokat támogat; a natív dinamikus SQL nem.

SQL utasítások újrafelhasználása

A PARSE eljárás a DBMS_SQL package egyszer elemez egy SQL utasítást. A kezdeti elemzés után az utasítás többször használható különböző kötési argumentumok halmazával.

Ezzel szemben a natív dinamikus SQL minden utasítás használatakor előkészít egy SQL utasítást végrehajtásra. A kimutatások elkészítése általában elemzéssel, optimalizálással és tervkészítéssel jár. Minden egyes nyilatkozat elkészítése alkalmával kis teljesítménybüntetést von maga után. Az Oracle megosztott kurzormechanizmusa azonban minimalizálja a költségeket, és a teljesítménybüntetés általában csekély, ha összehasonlítjuk a natív dinamikus SQL teljesítményelőnyeivel.

Példák a DBMS_SQL csomagkódra és a natív dinamikus SQL kódra

Az alábbi példák a DBMS_SQL csomag és a natív dinamikus SQL műveletek végrehajtásához szükséges kódbeli különbségeket mutatják be. Konkrétan a következő típusú példákat mutatjuk be:

  • lekérdezés
  • DML művelet
  • DML visszatérő művelet

Általában a natív dinamikus SQL kód olvashatóbb és kompaktabb, ami javíthatja a fejlesztői termelékenységet.

Lekérdezési példa

A következő példa egy dinamikus lekérdezési utasítást tartalmaz, egy kötési változóval (:jobname) és két kijelölt oszlop (ename és sal):

stmt_str := "SELECT ename, sal FROM emp WHERE job = :jobname";

Ez a példa a j ob description SALESMAN a emp táblázat job oszlopában. A 8-2. Táblázat azt a mintakódot mutatja, amely ezt a lekérdezést a DBMS_SQL csomag és a natív dinamikus SQL segítségével hajtja végre.

8-2. táblázat: Lekérdezés a DBMS_SQL csomag és a natív dinamikus SQL használatával

DML példa

A a következő példa dinamikus INSERT utasítást tartalmaz egy három oszlopos táblához:

stmt_str := "INSERT INTO dept_new VALUES (:deptno, :dname, :loc)";

Ez a példa új sort illeszt be amelyek oszlopértékei a PL / SQL változókban találhatók: deptnumber, deptname és location. A 8-3. Táblázat azt a mintakódot mutatja, amely ezt a DML műveletet a DBMS_SQL csomag és a natív dinamikus SQL segítségével hajtja végre.

8-3. Táblázat: DML művelet a DBMS_SQL csomag és Natív dinamikus SQL

DML visszatérő példa

A következő példa dinamikus UPDATE utasítás, amely frissíti az osztály helyét, amikor megadja az osztály számát (deptnumber) és egy új helyet (location), majd visszatér a részleg neve:

stmt_str := "UPDATE dept_new SET loc = :newloc WHERE deptno = :deptno RETURNING dname INTO :dname";

Ez a példa új sort illeszt be, amelynek oszlopértékei a PL / SQL változókban vannak deptnumber, deptname és location. A 8-4. Táblázat azt a mintakódot mutatja be, amely ezt a DML visszatérési műveletet a DBMS_SQL csomag és a natív dinamikus SQL segítségével hajtja végre.

8-4. Táblázat: DML visszatérési művelet a DBMS_SQL segítségével Csomag és natív dinamikus SQL

A PL / SQL kivételével más alkalmazásfejlesztési nyelvek

Az ebben a fejezetben eddig tárgyaltak a PL / SQL támogatásáról a dinamikus SQL számára.A dinamikus SQL-t használó programok megvalósításához azonban más alkalmazásfejlesztési nyelveket is használhat. Ezek az alkalmazásfejlesztési nyelvek a C / C ++, a COBOL és a Java nyelveket tartalmazzák.

A C / C ++ használata esetén dinamikus SQL-t használó alkalmazásokat fejleszthet ki az Oracle Call Interface (OCI) segítségével, vagy használhatja a Pro * C / C ++ előfordítót dinamikus SQL kiterjesztések hozzáadásához a C kód. Hasonlóképpen, ha COBOL-t használ, akkor a Pro * COBOL előfordító segítségével dinamikus SQL kiterjesztéseket adhat a COBOL-kódjához. Ha Java-t használ, olyan alkalmazásokat fejleszthet, amelyek dinamikus SQL-t használnak a JDBC-vel.

Korábban a PL / SQL-alkalmazásokban csak a csomag. A csomag használatának számos korlátozása van, beleértve a teljesítményre vonatkozó aggályokat is. Következésképpen az alkalmazásfejlesztők a PL / SQL fentebb tárgyalt alternatíváinak egyikét használták a dinamikus SQL megvalósításához. A natív dinamikus SQL PL / SQL-ben történő bevezetésével azonban a PL / SQL dinamikus SQL-hez történő felhasználásának számos hátránya megszűnik.

Ha van olyan alkalmazás, amely OCI-t használ, akkor a Pro * C / C ++ vagy Pro * COBOL a dinamikus SQL végrehajtáshoz a dinamikus SQL műveletek végrehajtásához szükséges hálózati körutak károsíthatják a teljesítményt. Mivel ezek az alkalmazások általában az ügyfeleken találhatók, több hálózati hívásra van szükség a dinamikus SQL műveletek végrehajtásához. Ha ilyen típusú alkalmazása van, fontolja meg a dinamikus SQL funkciók áthelyezését a natív dinamikus SQL-t használó PL / SQL tárolt eljárásokba és tárolt funkciókba. Ez javíthatja az alkalmazás teljesítményét, mivel a tárolt eljárások a szerveren tartózkodhatnak, ezáltal megszüntetve a hálózati általános költségeket. Ezután meghívhatja az alkalmazásból a PL / SQL tárolt eljárásokat és a tárolt függvényeket.

Lásd még:

További információ az Oracle tárolt eljárások és tárolt függvények nem PL / SQL alkalmazásokból történő meghívásáról , lásd:

  • Oracle Call Interface Programmer’s Guide
  • Pro * C / C ++ Precompiler Programmer’s Guide
  • Pro * COBOL Precompiler Programmer útmutatója
  • Oracle8i Java által tárolt eljárások fejlesztői útmutatója

Leave a Reply

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük