Dynamisk SQL er en programmeringsteknik, der giver dig mulighed for at opbygge SQL-sætninger dynamisk ved kørsel. Du kan oprette mere generelle, fleksible applikationer ved hjælp af dynamisk SQL, fordi den fulde tekst i en SQL-sætning muligvis er ukendt ved kompilering. For eksempel giver dynamisk SQL dig mulighed for at oprette en procedure, der fungerer på en tabel, hvis navn ikke er kendt før kørselstid.
I tidligere udgivelser af Oracle var den eneste måde at implementere dynamisk SQL i en PL / SQL-applikation på ved hjælp af DBMS_SQL
-pakken. Oracle8i introducerer native dynamisk SQL, et alternativ til DBMS_SQL
-pakken. Ved hjælp af native dynamisk SQL kan du placere dynamiske SQL-sætninger direkte i PL / SQL-blokke.
Dette kapitel dækker følgende emner:
- Hvad er dynamisk SQL?
- Hvornår skal man bruge dynamisk SQL
- Et dynamisk SQL-scenario ved hjælp af indfødt dynamisk SQL
- Indfødt dynamisk SQL versus DBMS_SQL-pakken
- Udviklingssprog andet end PL / SQL
Hvad er dynamisk SQL?
Dynamisk SQL giver dig mulighed for at skrive programmer, der refererer til SQL-sætninger, hvis fulde tekst ikke er kendt før runtime. Før en detaljeret diskussion af dynamisk SQL kan en klar definition af statisk SQL give et godt udgangspunkt for forståelse af dynamisk SQL. Statiske SQL-sætninger ændres ikke fra udførelse til udførelse. Den fulde tekst for statiske SQL-sætninger kendes ved kompilering, hvilket giver følgende fordele:
- Vellykket kompilering verificerer, at SQL-sætningerne refererer til gyldige databaseobjekter.
- Vellykket kompilering verificerer, at de nødvendige rettigheder er til stede for at få adgang til databaseobjekterne.
- Ydelse af statisk SQL er generelt bedre end dynamisk SQL.
På grund af disse fordele skal du kun bruge dynamisk SQL, hvis du ikke kan bruge statisk SQL til at nå dine mål, eller hvis brug af statisk SQL er besværligt sammenlignet med dynamisk SQL. Statisk SQL har dog begrænsninger, der kan overvindes med dynamisk SQL. Du kender muligvis ikke altid den fulde tekst til de SQL-sætninger, der skal udføres i en PL / SQL-procedure. Dit program accepterer muligvis brugerinput, der definerer de SQL-sætninger, der skal udføres, eller dit program skal muligvis udføre noget behandlingsarbejde for at bestemme det korrekte handlingsforløb. I sådanne tilfælde skal du bruge dynamisk SQL.
Overvej f.eks. en rapporteringsapplikation, der udfører standardforespørgsler på tabeller i et datalagermiljø, hvor det nøjagtige tabelnavn er ukendt indtil kørselstid. For at imødekomme den store mængde data i datalageret effektivt opretter du en ny tabel hvert kvartal for at gemme fakturaoplysningerne for kvartalet. Disse tabeller har alle nøjagtig den samme definition og er navngivet i henhold til startmåneden og året i kvartalet, for eksempel INV_01_1997
, INV_04_1997
, INV_07_1997
, INV_10_1997
, INV_01_1998
osv. I et sådant tilfælde kan du bruge dynamisk SQL i din rapporteringsapplikation for at specificere tabelnavnet ved kørsel.
Med statisk SQL skal alle datadefinitionsoplysninger, såsom tabeldefinitioner, der henvises til i SQL-sætningerne i dit program, være kendt under kompilering. Hvis datadefinitionen ændres, skal du ændre og kompilere programmet igen. Dynamiske SQL-programmer kan håndtere ændringer i datadefinitionsoplysninger, fordi SQL-sætningerne kan ændre sig “i farten” under kørsel. Derfor er dynamisk SQL meget mere fleksibel end statisk SQL. Dynamisk SQL giver dig mulighed for at skrive applikationskode, der kan genbruges, fordi koden definerer en proces, der er uafhængig af de anvendte specifikke SQL-sætninger.
Derudover giver dynamisk SQL dig mulighed for at udføre SQL-sætninger, der ikke understøttes i statisk SQL-programmer, såsom DDL-udsagn (Data Definition Language). Understøttelse af disse udsagn giver dig mulighed for at opnå mere med dine PL / SQL-programmer.
Udtrykket dynamiske SQL-programmer betyder programmer, der inkluderer dynamisk SQL; sådanne programmer kan også omfatte statisk SQL. Statiske SQL-programmer er de programmer, der kun indeholder statisk SQL og ingen dynamisk SQL.
Hvornår skal du bruge dynamisk SQL
Du skal bruge dynamisk SQL i tilfælde, hvor statisk SQL ikke understøtter operation, du vil udføre, eller i tilfælde, hvor du ikke kender de nøjagtige SQL-sætninger, der skal udføres ved en PL / SQL-procedure. Disse SQL-udsagn kan afhænge af brugerinput, eller de kan afhænge af behandlingsarbejde udført af programmet. De følgende afsnit beskriver typiske situationer, hvor du skal bruge dynamisk SQL og typiske problemer, der kan løses ved hjælp af dynamisk SQL.
Sådan udføres dynamiske DML-udsagn
Du kan bruge dynamisk SQL til at udføre DML-sætninger, hvor den nøjagtige SQL-sætning ikke er kendt før runtime.For eksempler, se DML-eksemplerne i “Eksempler på DBMS_SQL-pakkekode og Native Dynamic SQL-kode” og “Eksempel på DML-handling”.
At udføre udsagn, der ikke understøttes af statisk SQL i PL / SQL
I PL / SQL kan du ikke udføre følgende udsagnstyper ved hjælp af statisk SQL:
- DDL-udsagn om datadefinitionssprog, såsom
CREATE
,DROP
,GRANT
ogREVOKE
- Sessionskontrolsprog (SCL) udsagn, såsom
ALTER
SESSION
ogSET
ROLE
Se også:Oracle8i SQL Reference for information om DDL- og SCL-sætninger.
Brug dynamisk SQL, hvis du har brug for at udføre en af disse typer udsagn inden for en PL / SQL-blok.
Desuden tillader statisk SQL i PL / SQL ikke brugen af TABLE
-klausulen i SELECT
udsagn. Der er ingen sådan begrænsning i dynamisk SQL. For eksempel indeholder følgende PL / SQL-blok en SELECT
-udtalelse, der bruger TABLE
-sætningen og native dynamisk SQL:
Sådan udføres dynamiske forespørgsler
Du kan bruge dynamisk SQL til at oprette applikationer, der udfører dynamiske forespørgsler, som er forespørgsler, hvis fulde tekst ikke kendes før kørselstid. Mange typer applikationer har brug for dynamiske forespørgsler, herunder:
- Programmer, der giver brugerne mulighed for at indtaste eller vælge søgeforespørgsel eller sorteringskriterier ved kørsel
- Programmer, der giver brugerne mulighed for at indtaste eller vælg tip til optimering i løbetid
- Applikationer, der forespørger om en database, hvor datadefinitionerne af tabeller konstant ændrer sig
- Applikationer, der spørger til en database, hvor der ofte oprettes nye tabeller
For eksempler, se “Forespørgselseksempel” og se forespørgselseksemplerne i “Et dynamisk SQL-scenario ved hjælp af indfødt dynamisk SQL”.
Til referencedatabaseobjekter, der ikke findes ved kompilering
Mange typer applikationer skal interagere med data, der genereres periodisk. For eksempel kan det være muligt at bestemme definitionen af databasetabellerne ved kompilering, men ikke navnene på tabellerne, fordi nye tabeller genereres med jævne mellemrum. Din applikation skal have adgang til dataene, men der er ingen måde at kende de nøjagtige navne på tabellerne indtil runtime.
Dynamisk SQL kan løse dette problem, fordi dynamisk SQL giver dig mulighed for at vente til runtime for at specificere tabelnavne, du har brug for at få adgang til. F.eks. Genereres nye tabeller hvert kvartal i eksemplet på datalagerapplikationen, der diskuteres i “Hvad er dynamisk SQL?”, Og disse tabeller har altid den samme definition. I dette tilfælde kan du muligvis tillade en bruger at specificere navnet på tabellen ved kørsel med en dynamisk SQL-forespørgsel svarende til følgende:
At optimere udførelsen dynamisk
Hvis du bruger statisk SQL, skal du ved kompilering beslutte, hvordan du vil konstruere dine SQL-udsagn, om du vil have tip i dine udsagn, og hvis du inkluderer tip, nøjagtigt hvilke tip du skal have. Du kan dog bruge dynamisk SQL til at opbygge en SQL-sætning på en måde, der optimerer udførelsen og / eller sammenkæder tipene til en SQL-sætning dynamisk. Dette giver dig mulighed for at ændre tipene baseret på din nuværende databasestatistik uden at kræve rekompilering.
For eksempel bruger følgende procedure en variabel kaldet a_hint
for at tillade brugere at videregive en tipmulighed til SELECT
udsagn:
I dette eksempel kan brugeren videregive en af følgende værdier til a_hint
:
For at påkalde dynamiske PL / SQL-blokke
Du kan bruge EXECUTE
IMMEDIATE
erklæring for at påberåbe sig anonyme PL / SQL-blokke. Evnen til at påberåbe sig dynamiske PL / SQL-blokke kan være nyttig til applikationsudvidelse og tilpasning, hvor modulet, der skal udføres, bestemmes dynamisk ved kørsel.
Antag for eksempel, at du vil skrive et program, der tager en begivenhed nummer og forsendelse til en handler til begivenheden. Handlerens navn er i form EVENT_HANDLER_
event_num, hvor event_num er begivenhedens nummer. En tilgang ville være at implementere afsenderen som en switch-sætning, som vist nedenfor, hvor koden håndterer hver begivenhed ved at foretage et statisk opkald til den relevante handler.
Denne kode er ikke særlig udvidelig, fordi afsenderkoden skal opdateres, hver gang en handler til en ny begivenhed tilføjes. Ved hjælp af indfødt dynamisk SQL kan du dog skrive en udvidelig begivenhedssender, der ligner følgende:
Sådan udføres dynamiske operationer ved hjælp af Invoker-rettigheder
Ved at bruge invoker-rights-funktionen med dynamisk SQL, du kan opbygge applikationer, der udsender dynamiske SQL-sætninger under rettigheder og skema for invoker.Disse to funktioner, invoker-rettigheder og dynamisk SQL, giver dig mulighed for at opbygge genanvendelige applikationsunderkomponenter, der kan fungere på og få adgang til invokerens data og moduler.
PL / SQL-brugervejledning og reference for information om brug af opkalders rettigheder og native dynamisk SQL.
Et dynamisk SQL-scenario ved hjælp af indbygget dynamisk SQL
Scenariet beskrevet i dette afsnit illustrerer magt og fleksibilitet af native dynamisk SQL. Dette scenarie indeholder eksempler, der viser dig, hvordan du udfører følgende operationer ved hjælp af indfødt dynamisk SQL:
- Udfør DDL- og DML-operationer
- Udfør enkeltrække- og flere rækkeforespørgsler
Datamodel
Databasen i dette scenario er en virksomheds menneskelige ressourcedatabase (kaldet hr
) med følgende datamodel :
En mastertabel med navnet offices
indeholder listen over alle virksomhedsplaceringer. Tabellen offices
har følgende definition :
Column Name Null? Type LOCATION NOT_NULL VARCHAR2(200)
Flere emp_
placeringstabeller indeholder medarbejderoplysninger, hvor placering er navnet på den by, hvor kontoret er placeret. F.eks. indeholder en tabel med navnet emp_houston
medarbejderoplysninger for virksomhedens Houston-kontor, mens en tabel med navnet emp_boston
indeholder medarbejder oplysninger til firmaets kontor i Boston.
Hver emp_
placeringstabel har følgende definition:
De følgende afsnit beskriver forskellige native dynamiske SQL-operationer, der kan udføres på dataene i hr
database.
Eksempel på DML-handling
Følgende native dynamiske SQL-procedure giver et løft til alle medarbejdere med en bestemt jobtitel:
Eksempel på DDL-operation
EXECUTE IMMEDIATE
-erklæringen kan udføre DDL-handlinger. For eksempel tilføjer følgende procedure en kontorplacering:
Følgende procedure sletter en kontorplacering:
Eksempel på dynamisk forespørgsel med én række
EXECUTE
IMMEDIATE
udsagn kan udføre dynamiske forespørgsler i en række. Du kan specificere bindingsvariabler i USING
-sætningen og hente den resulterende række i det mål, der er angivet i INTO
-sætningen i udsagnet.
Følgende funktion henter antallet af medarbejdere på et bestemt sted, der udfører et specificeret job:
Eksempel på dynamisk forespørgsel med flere rækker
OPEN-FOR
, FETCH
og CLOSE
udsagn kan udføre dynamiske forespørgsler med flere rækker. For eksempel viser den følgende procedure alle medarbejdere med et bestemt job på et bestemt sted:
Native Dynamic SQL vs. DBMS_SQL Package
Oracle giver to metoder til brug af dynamisk SQL inden for PL / SQL: native dynamisk SQL og DBMS_SQL
-pakken. Native dynamisk SQL giver dig mulighed for at placere dynamiske SQL-sætninger direkte i PL / SQL-kode. Disse dynamiske udsagn inkluderer DML-sætninger (inklusive forespørgsler), PL / SQL anonyme blokke, DDL-sætninger, transaktionskontroludtalelser og sessionskontroludtalelser.
For at behandle de fleste indfødte dynamiske SQL-sætninger bruger du = “c304b268a8”> IMMEDIATE
udsagn. For at behandle en forespørgsel med flere rækker (SELECT
-udtalelse) bruger du OPEN-FOR
, FETCH
og CLOSE
udsagn.
For at bruge native dynamisk SQL skal COMPATIBLE
initialiseringsparameter skal indstilles til 8.1.0 eller højere. Se Oracle8i Migration for at få flere oplysninger om COMPATIBLE
parameteren.
DBMS_SQL
-pakken er et PL / SQL-bibliotek, der tilbyder en programmatisk API til udføre SQL-sætninger dynamisk. DBMS_SQL
-pakken har programmatiske grænseflader til at åbne en markør, parse en markør, forsyningsbindinger osv. Programmer, der bruger DBMS_SQL
-pakken foretager opkald til denne pakke for at udføre dynamiske SQL-operationer.
De følgende afsnit giver detaljerede oplysninger om fordelene ved begge metoder.
PL / SQL-brugervejledningen og referencen for detaljeret information om brug af native dynamisk SQL og den medfølgende Oracle8i PL / SQL-pakkehenvisning for detaljeret information om brug af DBMS_SQL
-pakke. I PL / SQL-brugervejledningen og henvisningen kaldes native dynamisk SQL simpelthen som dynamisk SQL.
Fordele ved Native Dynamic SQL
Native dynamisk SQL giver følgende fordele i forhold til DBMS_SQL
-pakke:
Brugervenlighed
Native dynamisk SQL er meget enklere at bruge end DBMS_SQL
-pakken.Da native dynamisk SQL er integreret med SQL, kan du bruge det på samme måde som du i øjeblikket bruger statisk SQL inden for PL / SQL-kode. Derudover er native dynamisk SQL-kode typisk mere kompakt og læsbar end ækvivalent kode, der bruger DBMS_SQL
-pakken.
DBMS_SQL
pakke er ikke så let at bruge som native dynamisk SQL. Der er mange procedurer og funktioner, der skal bruges i en streng rækkefølge. At udføre enkle handlinger kræver typisk en stor mængde kode, når du bruger DBMS_SQL
-pakken. Du kan undgå denne kompleksitet ved at bruge native dynamisk SQL i stedet.
Tabel 8-1 illustrerer forskellen i mængden af kode, der kræves for at udføre den samme handling ved hjælp af DBMS_SQL
pakke og native dynamisk SQL.
Tabel 8-1 Kodesammenligning af DBMS_SQL-pakke og Native Dynamic SQL
Ydelsesforbedringer
Ydelsen til native dynamisk SQL i PL / SQL kan sammenlignes med ydelsen af statisk SQL, fordi PL / SQL-tolken har indbygget understøttelse af native dynamisk SQL. Derfor er ydeevnen for programmer, der bruger native dynamisk SQL, meget bedre end for programmer, der bruger DBMS_SQL
-pakken. Typisk udfører native dynamiske SQL-sætninger 1,5 til 3 gange bedre end ækvivalente udsagn, der bruger DBMS_SQL
-pakken. Selvfølgelig kan dine præstationsgevinster variere afhængigt af din applikation.
DBMS_SQL
-pakken er baseret på et proceduremæssigt API og påløber som følge heraf omkostningsprocedure for opkalds- og datakopiering med høj procedure. For eksempel, hver gang du binder en variabel, kopierer DBMS_SQL
pakken PL / SQL-bindingsvariablen til dens plads til senere brug under udførelsen. Tilsvarende, hver gang du udfører en hentning, kopieres dataene først til det rum, der administreres af DBMS_SQL
-pakken, og derefter kopieres de hentede data en kolonne ad gangen til den relevante PL / SQL-variabler, hvilket resulterer i betydelige omkostninger som følge af datakopiering. I modsætning hertil samler native dynamisk SQL sætningens klargøring, binding og udførelsestrin i en enkelt operation, hvilket minimerer datakopiering og procedureopkaldsoverhead og forbedrer ydeevnen.
Performance Tip
Når du bruger enten native Dynamic SQL eller DBMS_SQL
-pakken, kan du forbedre ydeevnen ved hjælp af bindingsvariabler, fordi brug af bindingsvariabler giver Oracle mulighed for at dele en enkelt markør til flere SQL-sætninger.
For eksempel bruger følgende native dynamiske SQL-kode ikke bindingsvariabler:
For hver særskilt my_deptno
-variabel oprettes en ny markør, som kan forårsage ressourcekonflikt og dårlig ydeevne. I stedet binder my_deptno
som en bindingsvariabel, som i følgende eksempel:
Her genbruges den samme markør til forskellige værdier af bindingen my_deptno
og forbedrer derved ydeevne og skalabilitet.
Understøttelse af brugerdefinerede typer
Indfødt dynamisk SQL understøtter alle de typer, der understøttes af statisk SQL i PL / SQL. Derfor understøtter native dynamisk SQL brugerdefinerede typer, såsom brugerdefinerede objekter, samlinger og REFs
. DBMS_SQL
-pakken understøtter ikke disse brugerdefinerede typer.
DBMS_SQL
-pakken giver begrænset support til arrays. Se Oracle8i leverede PL / SQL-pakker Reference for information.
Understøttelse af hentning til poster
Indfødt dynamisk SQL og statisk SQL understøtter begge hentning til poster, men DBMS_SQL
-pakken gør det ikke. Med indfødt dynamisk SQL kan rækkerne, der stammer fra en forespørgsel, hentes direkte i PL / SQL-poster.
I det følgende eksempel hentes rækkerne fra en forespørgsel til emp_rec
-post:
Fordele ved DBMS_SQL-pakken
DBMS_SQL
-pakken giver følgende fordele i forhold til native dynamisk SQL:
Understøttelse af klientsideprogrammer
I øjeblikket understøttes DBMS_SQL
-pakken i klientsideprogrammer, men native dynamisk SQL er ikke. Hvert opkald til DBMS_SQL
-pakken fra klientsideprogrammet oversættes til et PL / SQL-fjernprocedurkald (RPC); disse opkald forekommer, når du har brug for at binde en variabel, definere en variabel eller udføre en sætning.
Understøttelse af DESCRIBE
DESCRIBE_COLUMNS
-proceduren i DBMS_SQL
-pakken kan bruges til beskriv kolonnerne for en markør, der er åbnet og parset gennem DBMS_SQL
. Funktionaliteten svarer til kommandoen DESCRIBE
i SQL * Plus. Indbygget dynamisk SQL har ikke en DESCRIBE
-facilitet.
Understøttelse af dynamisk bulk i SQL
Bulk SQL er evnen til at behandle flere datarækker i en enkelt DML-sætning. Bulk SQL forbedrer ydeevnen ved at reducere mængden af kontekstskift mellem SQL og værtssproget. I øjeblikket understøtter DBMS_SQL
pakken dynamisk SQL i bulk.
Selvom der ikke er nogen direkte understøttelse af bulkoperationer i native dynamisk SQL, kan du simulere en native dynamisk bulk SQL erklæring ved at placere den samlede SQL-sætning i en “BEGIN
… END
” -blok og udføre blokken dynamisk. Denne løsning giver dig mulighed for at indse fordelene ved bulk SQL inden for et native dynamisk SQL-program. For eksempel kopierer følgende native dynamiske SQL-kode ename
-kolonnen i en tabel til en anden:
Flere rækkeopdateringer og sletninger med en RETURNING-klausul
DBMS_SQL
-pakken understøtter udsagn med en RETURNING
-klausul, der opdaterer eller sletter flere rækker. Native dynamisk SQL understøtter kun en RETURNING
-klausul, hvis en enkelt række returneres.
“DML Returneringseksempel” for eksempler på DBMS_SQL
pakke kode og native dynamisk SQL-kode, der bruger en RETURNING
klausul.
Understøttelse af SQL-udsagn, der er større end 32 KB
DBMS_SQL
pakke understøtter SQL-sætninger større end 32 KB; native dynamisk SQL gør ikke det.
Genbrug af SQL-udsagn
PARSE
-proceduren i DBMS_SQL
pakke analyserer en SQL-sætning en gang. Efter den indledende parsing kan udsagnet bruges flere gange med forskellige sæt bindingsargumenter.
I modsætning hertil forbereder native dynamisk SQL en SQL-sætning til udførelse hver gang udsagnet bruges. Statutforberedelse indebærer typisk parsing, optimering og generering af planer. Forberedelse af en erklæring hver gang den bruges medfører en lille præstationsstraff. Oracle’s delte markørmekanisme minimerer dog omkostningerne, og ydelsesstraffen er typisk triviel sammenlignet med ydelsesfordelene ved native dynamisk SQL.
Eksempler på DBMS_SQL-pakke kode og Native Dynamic SQL-kode
De følgende eksempler illustrerer forskellene i den kode, der er nødvendig for at fuldføre operationer med DBMS_SQL
-pakken og native dynamisk SQL. Specifikt præsenteres følgende typer eksempler:
- En forespørgsel
- En DML-handling
- En DML-returneringshandling
Generelt er den oprindelige dynamiske SQL-kode mere læselig og kompakt, hvilket kan forbedre udviklerens produktivitet.
Forespørgselseksempel
Følgende eksempel inkluderer en dynamisk forespørgselserklæring med en bindingsvariabel (:jobname
) og to valgte kolonner (ename
og sal
):
stmt_str := "SELECT ename, sal FROM emp WHERE job = :jobname";
Dette eksempel forespørgsler til medarbejdere med j ob beskrivelse SALESMAN
i job
kolonnen i emp
tabellen. Tabel 8-2 viser eksempelkode, der udfører denne forespørgsel ved hjælp af DBMS_SQL
-pakken og native dynamisk SQL.
Tabel 8-2 Forespørgsel ved hjælp af DBMS_SQL-pakken og Native Dynamic SQL
DML-eksempel
følgende eksempel inkluderer en dynamisk INSERT
sætning til en tabel med tre kolonner:
stmt_str := "INSERT INTO dept_new VALUES (:deptno, :dname, :loc)";
Dette eksempel indsætter en ny række hvor kolonneværdierne findes i PL / SQL-variablerne deptnumber
, deptname
og location
. Tabel 8-3 viser eksempelkode, der udfører denne DML-handling ved hjælp af DBMS_SQL
-pakken og native dynamisk SQL.
Tabel 8-3 DML-drift ved hjælp af DBMS_SQL-pakken og Native Dynamic SQL
DML Returneringseksempel
Følgende eksempel inkluderer et dynamisk UPDATE
udsagn, der opdaterer placeringen af en afdeling, når der gives afdelingens nummer (deptnumber
) og en ny placering (location
), og returnerer derefter navnet på afdelingen:
stmt_str := "UPDATE dept_new SET loc = :newloc WHERE deptno = :deptno RETURNING dname INTO :dname";
Dette eksempel indsætter en ny række, hvor kolonneværdierne findes i PL / SQL-variablerne deptnumber
, deptname
og location
. Tabel 8-4 viser eksempelkode, der udfører denne DML-returoperation ved hjælp af DBMS_SQL
-pakken og native dynamisk SQL.
Tabel 8-4 DML-returneringshandling ved hjælp af DBMS_SQL Pakke og indfødt dynamisk SQL
Applikationsudviklingssprog andet end PL / SQL
Indtil videre har diskussionen i dette kapitel været om PL / SQL support til dynamisk SQL.Du kan dog bruge andre applikationsudviklingssprog til at implementere programmer, der bruger dynamisk SQL. Disse sprog til applikationsudvikling inkluderer C / C ++, COBOL og Java.
Hvis du bruger C / C ++, kan du udvikle applikationer, der bruger dynamisk SQL med Oracle Call Interface (OCI), eller du kan bruge Pro * C / C ++ precompiler til at tilføje dynamiske SQL-udvidelser til din C kode. På samme måde, hvis du bruger COBOL, kan du bruge Pro * COBOL-precompileren til at tilføje dynamiske SQL-udvidelser til din COBOL-kode. Hvis du bruger Java, kan du udvikle applikationer, der bruger dynamisk SQL med JDBC.
Tidligere var den eneste måde at bruge dynamisk SQL i PL / SQL-applikationer på ved hjælp af DBMS_SQL
pakke. Der er en række begrænsninger for at bruge denne pakke, herunder præstationsproblemer. Derfor kan applikationsudviklere muligvis have brugt et af de alternativer, der er beskrevet ovenfor til PL / SQL, til at implementere dynamisk SQL. Men med introduktionen af native dynamisk SQL i PL / SQL er mange af ulemperne ved at bruge PL / SQL til dynamisk SQL nu elimineret.
Hvis du har et program, der bruger OCI, Pro * C / C ++ eller Pro * COBOL til dynamisk SQL-udførelse, de netværksrundture, der kræves for at udføre dynamiske SQL-operationer, kan skade ydeevnen. Da disse applikationer typisk findes på klienter, kræves der flere netværksopkald for at fuldføre dynamiske SQL-operationer. Hvis du har denne type applikation, skal du overveje at flytte den dynamiske SQL-funktionalitet til lagrede procedurer og gemte funktioner i PL / SQL, der bruger native dynamisk SQL. Dette kan forbedre ydeevnen for din applikation, fordi de gemte procedurer kan findes på serveren og derved eliminere netværksomkostningerne. Du kan derefter ringe til de lagrede PL / SQL-procedurer og lagrede funktioner fra applikationen.
For information om at ringe til Oracle-lagrede procedurer og lagrede funktioner fra ikke-PL / SQL-applikationer , henvises til:
- Guide til Oracle Call Interface-programmerer
- Pro * C / C ++ Precompiler Programmeringsvejledning
- Pro * COBOL Precompiler Programmer “Vejledning
- Oracle8i Java Stored Procedures Developer’s Guide