Dynamic SQL ist eine Programmiertechnik, mit der Sie SQL-Anweisungen zur Laufzeit dynamisch erstellen können. Sie können allgemeinere, flexible Anwendungen mithilfe von Dynamic SQL erstellen, da der vollständige Text einer SQL-Anweisung bei der Kompilierung möglicherweise unbekannt ist. Mit Dynamic SQL können Sie beispielsweise eine Prozedur erstellen, die auf einer Tabelle ausgeführt wird, deren Name bis zur Laufzeit nicht bekannt ist.,

Oracle bietet zwei Möglichkeiten, dynamisches SQL in einer PL/SQL-Anwendung zu implementieren:

  • Natives dynamisches SQL, in dem Sie dynamische SQL-Anweisungen direkt in PL/SQL-Blöcke einfügen.
  • Aufrufen von Prozeduren im Paket DBMS_SQL.

Dieses Kapitel behandelt die folgenden Themen:

  • „Was ist Dynamic SQL?“
  • „Warum Dynamisches SQL Verwenden?,“
  • „Ein dynamisches SQL-Szenario mit nativem dynamischem SQL“
  • „Auswahl zwischen nativem dynamischem SQL und dem DBMS_SQL-Paket“
  • „Verwenden von dynamischem SQL in anderen Sprachen als PL/SQL“
  • „Verwenden von PL/SQL-Datensätzen in SQL-EINFÜGE-und Aktualisierungsanweisungen“

Sie können Details zum Paket DBMS_SQL in den von Oracle9i gelieferten PL/SQL-Paketen und Typen Referenz.

Was Ist Dynamisches SQL?

Mit Dynamic SQL können Sie Programme schreiben, die auf SQL-Anweisungen verweisen, deren vollständiger Text zur Laufzeit nicht bekannt ist., Bevor dynamisches SQL im Detail diskutiert wird, kann eine klare Definition von statischem SQL einen guten Ausgangspunkt für das Verständnis von dynamischem SQL bieten. Statische SQL-Anweisungen ändern sich nicht von Ausführung zu Ausführung. Der vollständige Text statischer SQL-Anweisungen ist bei der Kompilierung bekannt, was die folgenden Vorteile bietet:

  • Erfolgreiche Kompilierung überprüft, ob die SQL-Anweisungen auf gültige Datenbankobjekte verweisen.
  • Erfolgreiche Kompilierung überprüft, ob die erforderlichen Berechtigungen für den Zugriff auf die Datenbankobjekte vorhanden sind.,
  • Die Leistung von statischem SQL ist im Allgemeinen besser als dynamisches SQL.

Aufgrund dieser Vorteile sollten Sie dynamisches SQL nur verwenden, wenn Sie statisches SQL nicht verwenden können, um Ihre Ziele zu erreichen, oder wenn die Verwendung von statischem SQL im Vergleich zu dynamischem SQL umständlich ist. Statisches SQL weist jedoch Einschränkungen auf, die mit dynamischem SQL überwunden werden können. Möglicherweise kennen Sie nicht immer den vollständigen Text der SQL-Anweisungen, die in einer PL/SQL-Prozedur ausgeführt werden müssen., Ihr Programm akzeptiert möglicherweise Benutzereingaben, die die auszuführenden SQL-Anweisungen definieren, oder Ihr Programm muss einige Verarbeitungsarbeiten ausführen, um die richtige Vorgehensweise zu bestimmen. In solchen Fällen sollten Sie dynamisches SQL verwenden.

Beispielsweise kann eine Berichtsanwendung in einer Data Warehouse-Umgebung den genauen Tabellennamen bis zur Laufzeit möglicherweise nicht kennen., Diese Tabellen können nach dem Anfangsmonat und-jahr des Quartals benannt werden, z. B. INV_01_1997, INV_04_1997, INV_07_1997, INV_10_1997, INV_01_1998 usw. Sie können Dynamic SQL in Ihrer Berichtsanwendung verwenden, um den Tabellennamen zur Laufzeit anzugeben.

Möglicherweise möchten Sie auch eine komplexe Abfrage mit einer vom Benutzer auswählbaren Sortierreihenfolge ausführen., Anstatt die Abfrage zweimal mit verschiedenen ORDER BY – Klauseln zu codieren, können Sie die Abfrage dynamisch erstellen, um eine angegebene ORDER BY – Klausel einzuschließen.

Dynamische SQL-Programme können Änderungen in Datendefinitionen verarbeiten, ohne dass eine Neukompilierung erforderlich ist. Dies macht dynamisches SQL viel flexibler als statisches SQL. Mit Dynamic SQL können Sie wiederverwendbaren Code schreiben, da SQL einfach an verschiedene Umgebungen angepasst werden kann..,

Mit Dynamic SQL können Sie auch DDL-Anweisungen (Data Definition Language) und andere SQL-Anweisungen ausführen, die in rein statischen SQL-Programmen nicht unterstützt werden.

Warum Dynamisches SQL Verwenden?

Sie sollten dynamisches SQL in Fällen verwenden, in denen statisches SQL die Operation, die Sie ausführen möchten, nicht unterstützt, oder in Fällen, in denen Sie nicht die genauen SQL-Anweisungen kennen, die von einer PL/SQL-Prozedur ausgeführt werden müssen. Diese SQL-Anweisungen können von Benutzereingaben abhängen oder von der Verarbeitungsarbeit des Programms abhängen.,DL and SCL Statements in PL/SQL

In PL/SQL, you can only execute the following types of statements using dynamic SQL, rather than static SQL:

  • Data definition language (DDL) statements, such as CREATE, DROP, GRANT, and REVOKE
  • Session control language (SCL) statements, such as ALTER SESSION and SET ROLE

    See Also:

    Oracle9i SQL Reference for information about DDL and SCL statements.,

Außerdem können Sie nur dieTABLE – Klausel in derSELECT – Anweisung über dynamic SQL verwenden. Der folgende PL/SQL-Block enthält beispielsweise eineSELECT – Anweisung, die dieTABLE – Klausel und natives dynamisches SQL verwendet:

Ausführen dynamischer Abfragen

Sie können dynamic SQL verwenden, um Anwendungen zu erstellen, die dynamische Abfragen ausführen, deren vollständiger Text bis zur Laufzeit nicht bekannt ist., Viele Arten von Anwendungen müssen dynamische Abfragen verwenden, einschließlich:

  • Anwendungen, mit denen Benutzer zur Laufzeit Such-oder Sortierkriterien eingeben oder auswählen können
  • Anwendungen, mit denen Benutzer Optimierererhinweise zur Laufzeit eingeben oder auswählen können
  • Anwendungen, die eine Datenbank abfragen, in der sich die Datendefinitionen von Tabellen ständig ändern
  • Anwendungen, die eine Datenbank abfragen, in der häufig neue Tabellen erstellt werden

Beispiele finden Sie unter „Abfragen mit dynamischem SQL: Beispiel“ und sehen Sie die Abfrage beispiele in „Ein dynamisches SQL-Szenario mit nativem dynamischem SQL“.,

Referenzierende Datenbankobjekte, die bei der Kompilierung nicht vorhanden sind

Viele Anwendungstypen müssen mit periodisch generierten Daten interagieren. Beispielsweise kennen Sie möglicherweise die Tabellendefinitionen zur Kompilierungszeit, aber nicht die Namen der Tabellen.

Dynamisches SQL kann dieses Problem lösen, da Sie bis zur Laufzeit warten können, um die Tabellennamen anzugeben. Zum Beispiel in der Beispiel Data Warehouse-Anwendung, die in „Was ist dynamisches SQL?“, neue Tabellen werden jedes Quartal generiert, und diese Tabellen haben immer die gleiche Definition., Sie können einen Benutzer den Namen der Tabelle zur Laufzeit mit einer dynamischen SQL-Abfrage angeben lassen, die der folgenden ähnelt:

Ausführung dynamisch optimieren

Sie können dynamic SQL verwenden, um eine SQL-Anweisung auf eine Weise zu erstellen, die die Ausführung optimiert, indem Sie die Hinweise dynamisch in eine SQL-Anweisung verketten. Auf diese Weise können Sie die Hinweise basierend auf Ihren aktuellen Datenbankstatistiken ändern, ohne dass eine Neukompilierung erforderlich ist.,

Das folgende Verfahren verwendet beispielsweise eine Variable mit dem Namen a_hint, mit der Benutzer eine Hinweisoption an die SELECT – Anweisung übergeben können:

In diesem Beispiel kann der Benutzer einen der folgenden Werte für a_hint:

a_hint = '/*+ ALL_ROWS */'a_hint = '/*+ FIRST_ROWS */'a_hint = '/*+ CHOOSE */'oder jede andere gültige Hinweisoption.


Siehe auch:

Oracle9i Database Performance Guide und Referenz für weitere Informationen zur Verwendung von Hinweisen.,

Ausführen dynamischer PL/SQL-Blöcke

Sie können die Anweisung EXECUTE IMMEDIATE verwenden, um anonyme PL/SQL-Blöcke auszuführen. Sie können Flexibilität hinzufügen, indem Sie den Blockinhalt zur Laufzeit erstellen.

Angenommen, Sie möchten eine Anwendung schreiben, die eine Ereignisnummer annimmt und an einen Handler für das Ereignis sendet. Der Name des Handlers hat die Form EVENT_HANDLER_event_num, wobei event_num die Nummer des Ereignisses ist., Ein Ansatz besteht darin, den Dispatcher als switch-Anweisung zu implementieren, wobei der Code jedes Ereignis behandelt, indem er einen statischen Aufruf an den entsprechenden Handler ausführt. Dieser Code ist nicht sehr erweiterbar, da der Dispatcher-Code aktualisiert werden muss, wenn ein Handler für ein neues Ereignis hinzugefügt wird.,

Mit nativem dynamischem SQL können Sie einen kleineren, flexibleren Ereignis-Dispatcher schreiben, ähnlich dem Folgenden:

Ausführen dynamischer Operationen mit Aufruferrechten

Mit der Aufruferrechte-Funktion mit dynamischem SQL können Sie Anwendungen erstellen, die dynamische SQL-Anweisungen unter den Berechtigungen und dem Schema des Aufrufers ausgeben. Mit diesen beiden Funktionen, Invoker-Rights und Dynamic SQL, können Sie wiederverwendbare Anwendungsunterkomponenten erstellen, die mit den Daten und Modulen des Aufrufers arbeiten und darauf zugreifen können.,


Siehe auch:

PL / SQL Benutzerhandbuch und Referenz für Informationen zur Verwendung von Invokers-rights und nativem dynamischem SQL.,

Ein dynamisches SQL-Szenario mit nativem dynamischem SQL

Dieses Szenario zeigt Ihnen, wie Sie die folgenden Operationen mit nativem dynamischem SQL ausführen:

  • DDL-und DML-Operationen ausführen
  • Einzelne Zeilen und mehrere Zeilenabfragen ausführen

Die Datenbank in diesem Szenario ist die Personaldatenbank eines Unternehmens (mit dem Namen hr) mit dem folgenden Datenmodell:

Eine Master-Tabelle mit dem Namen offices enthält die Liste aller Unternehmensstandorte., Die Tabelle offices hat folgende Definition:

emp_Standorttabellen enthalten die Mitarbeiterinformationen, wobei Standort der Name der Stadt ist, in der sich das Büro befindet. Beispielsweise enthält eine Tabelle mit dem Namen emp_houston Mitarbeiterinformationen für das Houston Office des Unternehmens, während eine Tabelle mit dem Namen emp_boston Mitarbeiterinformationen für das Boston Office des Unternehmens enthält.,

Jedeemp_location table hat die folgende Definition:

In den folgenden Abschnitten werden verschiedene native dynamische SQL-Operationen beschrieben, die für die Daten in derhr – Datenbank ausgeführt werden können.

Beispiel-DML-Operation mit nativem dynamischem SQL

Die folgende native dynamische SQL-Prozedur erhöht alle Mitarbeiter mit einem bestimmten Jobtitel:

Beispiel-DDL-Operation Mit nativem dynamischem SQL

Die EXECUTE IMMEDIATE – Anweisung kann DDL-Operationen ausführen., Die folgende Prozedur fügt beispielsweise einen Bürostandort hinzu:

Mit der folgenden Prozedur wird ein Bürostandort gelöscht:

Beispielabfrage mit einzeiligem nativem dynamischem SQL

Die EXECUTE IMMEDIATE-Anweisung kann dynamische einzeilige Abfragen ausführen. Sie können Bindungsvariablen in der Klausel USING angeben und die resultierende Zeile in das Ziel abrufen, das in der Klausel INTO der Anweisung angegeben ist.,

Die folgende Funktion ruft die Anzahl der Mitarbeiter an einem bestimmten Ort ab, die einen bestimmten Job ausführen:

Beispiel-mehrzeilige Abfrage mit nativem dynamischem SQL

Die OPEN-FOR, FETCH und CLOSE Anweisungen können dynamische mehrzeilige Abfragen ausführen., Die folgende Prozedur listet beispielsweise alle Mitarbeiter mit einem bestimmten Job an einem bestimmten Ort auf:

Die Wahl zwischen nativem dynamischem SQL und dem DBMS_SQL-Paket

Oracle bietet zwei Methoden zur Verwendung von dynamischem SQL in PL/SQL: natives dynamisches SQL und das Paket DBMS_SQL. Native dynamische SQL können Sie dynamische SQL-Anweisungen direkt in PL/SQL-Code platzieren. Diese dynamischen Anweisungen umfassen DML-Anweisungen (einschließlich Abfragen), anonyme PL/SQL-Blöcke, DDL-Anweisungen, Anweisungen zur Transaktionskontrolle und Anweisungen zur Sitzungssteuerung.,

To process most native dynamic SQL statements, you use the EXECUTE IMMEDIATE statement. To process a multi-row query (SELECT statement), you use OPEN-FOR, FETCH, and CLOSE statements.


Note:

To use native dynamic SQL, the COMPATIBLE initialization parameter must be set to 8.1.0 or higher. See Oracle9i Database Migration for more information about the COMPATIBLE parameter.,

DasDBMS_SQL – Paket ist eine PL / SQL-Bibliothek, die eine API zum dynamischen Ausführen von SQL-Anweisungen bietet. Das Paket DBMS_SQL verfügt über Prozeduren zum Öffnen eines Cursors, zum Analysieren eines Cursors, zum Bereitstellen von Bindungen usw. Programme, die das Paket DBMS_SQL verwenden, rufen dieses Paket auf, um dynamische SQL-Operationen auszuführen.

Die folgenden Abschnitte enthalten detaillierte Informationen zu den Vorteilen beider Methoden.,


Siehe auch:

Das PL/SQL-Benutzerhandbuch und die Referenz für detaillierte Informationen zur Verwendung von nativem dynamischem SQL und den von Oracle9i bereitgestellten PL/SQL-Paketen und-Typen Referenz für detaillierte Informationen zur Verwendung des DBMS_SQL – Pakets. Im PL/SQL-Benutzerhandbuch und in der Referenz wird natives dynamisches SQL einfach als dynamisches SQL bezeichnet.,

Vorteile von nativem dynamischem SQL

Natives dynamisches SQL bietet die folgenden Vorteile gegenüber demDBMS_SQL Paket:

Natives dynamisches SQL ist einfach zu verwenden

Da natives dynamisches SQL in SQL integriert ist, können Sie es genauso verwenden, wie statisches SQL in PL/SQL-Code. Nativer dynamischer SQL-Code ist normalerweise kompakter und lesbarer als äquivalenter Code, der das DBMS_SQL – Paket verwendet.,

Mit demDBMS_SQL – Paket müssen Sie viele Prozeduren und Funktionen in einer strengen Reihenfolge aufrufen, sodass selbst einfache Operationen viel Code erfordern. Sie können diese Komplexität vermeiden, indem Sie stattdessen natives dynamisches SQL verwenden.

Tabelle 8-1 veranschaulicht den Unterschied in der Menge an Code, die erforderlich ist, um dieselbe Operation mit dem DBMS_SQL – Paket und dem nativen dynamischen SQL auszuführen.,

Tabelle 8-1 Code Vergleich von DBMS_SQL Paket und Native Dynamische SQL

Native Dynamische SQL ist Schneller als DBMS_SQL

Native dynamische SQL in PL / SQL führt vergleichbar mit der leistung von statische SQL, weil die PL/SQL interpreter hat eingebaute unterstützung für es. Programme, die natives dynamisches SQL verwenden, sind viel schneller als Programme, die das Paket DBMS_SQL verwenden. In der Regel sind native dynamische SQL-Anweisungen 1,5-bis dreimal besser als äquivalenteDBMS_SQL – Aufrufe. (Ihre Leistungssteigerungen können je nach Anwendung variieren.,)

Natives dynamisches SQL bündelt die Schritte zur Vorbereitung, Bindung und Ausführung von Anweisungen in einer einzigen Operation, wodurch der Aufwand für das Kopieren von Daten und Prozeduren minimiert und die Leistung verbessert wird.

DasDBMS_SQL – Paket basiert auf einer prozeduralen API und verursacht einen hohen Aufwand für Prozeduraufrufe und Datenkopien. Jedes Mal, wenn Sie eine Variable binden, kopiert das Paket DBMS_SQL die PL/SQL-Bindungsvariable in ihren Bereich, um sie während der Ausführung zu verwenden., Jedes Mal, wenn Sie einen Abruf ausführen, werden die Daten in den vom DBMS_SQL – Paket verwalteten Bereich kopiert und dann werden die abgerufenen Daten eine Spalte nach der anderen in die entsprechenden PL/SQL-Variablen kopiert, was zu einem erheblichen Overhead führt.

Leistungstipp: Verwenden von Bind-Variablen

Wenn Sie entweder natives dynamisches SQL oder das DBMS_SQL – Paket verwenden, können Sie die Leistung verbessern, indem Sie bind-Variablen verwenden, da Bind-Variablen Oracle erlauben, einen einzelnen Cursor für mehrere SQL-Anweisungen gemeinsam zu nutzen.,

Der folgende native dynamische SQL-Code verwendet beispielsweise keine Bindungsvariablen:

Für jede eindeutigemy_deptno Variable wird ein neuer Cursor erstellt, der Ressourcenkonflikte und schlechte Leistung verursacht. Binden Sie stattdessen my_deptno als bind Variable:

Hier wird derselbe Cursor für verschiedene Werte der bind my_deptno wiederverwendet, was die Leistung und Skalierbarkeit verbessert.,

Natives dynamisches SQL unterstützt benutzerdefinierte Typen

Natives dynamisches SQL unterstützt alle von statischem SQL in PL/SQL unterstützten Typen, einschließlich benutzerdefinierter Typen wie benutzerdefinierter Objekte, Sammlungen und REFs. DasDBMS_SQL Paket unterstützt diese benutzerdefinierten Typen nicht.

Hinweis:

DasDBMS_SQL Paket bietet eingeschränkte Unterstützung für Arrays. Weitere Informationen finden Sie in der von Oracle9i bereitgestellten PL/SQL-Paket-und Typenreferenz.,

Natives dynamisches SQL Unterstützt das Abrufen in Datensätze

Natives dynamisches SQL und statisches SQL unterstützen beide das Abrufen in Datensätze, das Paket DBMS_SQL jedoch nicht. Mit nativem dynamischem SQL können die aus einer Abfrage resultierenden Zeilen direkt in PL/SQL-Datensätze abgerufen werden.,

Im folgenden Beispiel werden die Zeilen aus einer Abfrage in den emp_rec-Datensatz abgerufen:

Vorteile des DBMS_SQL-Pakets

Die DBMS_SQL – Paket bietet die folgenden Vorteile gegenüber nativem dynamischem SQL:

DBMS_SQL wird in clientseitigen Programmen unterstützt

Die DBMS_SQL Paket wird in clientseitigen Programmen unterstützt, natives dynamisches SQL jedoch nicht., Jeder Aufruf desDBMS_SQL Pakets aus dem clientseitigen Programm wird in einen PL/SQL Remote Procedure Call (RPC) übersetzt; Diese Aufrufe treten auf, wenn Sie eine Variable binden, eine Variable definieren oder eine Anweisung ausführen müssen.

DBMS_SQL Unterstützt DESCRIBE

DieDESCRIBE_COLUMNS – Prozedur imDBMS_SQL – Paket kann verwendet werden, um die Spalten für einen Cursor zu beschreiben, der überDBMS_SQLgeöffnet und analysiert wurde. Diese Funktion ähnelt dem Befehl DESCRIBE in SQL * Plus., Native dynamische SQL hat keine DESCRIBE – Funktion.

DBMS_SQL Unterstützt mehrere Zeilenaktualisierungen und löscht mit einer Rückgabeklausel

Das DBMS_SQL – Paket unterstützt Anweisungen mit einer RETURNING – Klausel, die mehrere Zeilen aktualisieren oder löschen. Native dynamische SQL unterstützt nur eineRETURNING Klausel, wenn eine einzelne Zeile zurückgegeben wird.,


See Also:

„Performing DML with RETURNING Clause Using Dynamic SQL: Example“ for examples of DBMS_SQL package code and native dynamic SQL code that uses a RETURNING clause.

DBMS_SQL Supports SQL Statements Larger than 32KB

The DBMS_SQL package supports SQL statements larger than 32KB; native dynamic SQL does not.

DBMS_SQL Lets You Reuse SQL Statements

The PARSE procedure in the DBMS_SQL package parses a SQL statement once., Nach dem ersten Parsen können Sie die Anweisung mehrmals mit verschiedenen Sätzen von Bindeargumenten verwenden.

Native dynamische SQL bereitet eine SQL-Anweisung jedes Mal, wenn die Anweisung verwendet wird, die in der Regel beinhaltet Parsen, Optimierung und Plangenerierung. Obwohl für die zusätzlichen Vorbereitungsvorgänge eine geringe Leistungseinbuße anfällt, wird die Verlangsamung in der Regel durch die Leistungsvorteile von nativem dynamischem SQL aufgewogen.,

Beispiele für DBMS_SQL-Paketcode und nativen dynamischen SQL-Code

Die folgenden Beispiele veranschaulichen die Unterschiede im Code, die zum Abschließen von Operationen mit dem DBMS_SQL – Paket und nativem dynamischem SQL erforderlich sind. Insbesondere werden die folgenden Arten von Beispielen vorgestellt:

  • Eine Abfrage
  • Eine DML-Operation
  • Eine DML-Rückgabeoperation

Im Allgemeinen ist der native dynamische SQL-Code lesbarer und kompakter, was die Produktivität der Entwickler verbessern kann.,

Abfragen mit Dynamic SQL: Beispiel

Das folgende Beispiel enthält eine dynamische query-Anweisung mit einer bind-Variablen (:jobname) und zwei select-Spalten (ename undsal):

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

Dieses Beispiel fragt Mitarbeiter mit die StellenbeschreibungSALESMAN in der Spaltejob der Tabelleemp. Tabelle 8-2 zeigt Beispielcode, der diese Abfrage mit dem Paket DBMS_SQL und nativem dynamischem SQL ausführt.,

Tabelle 8-2 Abfragen mit dem DBMS_SQL-Paket und nativem dynamischem SQL

Durchführen von DML mit dynamischem SQL: Beispiel

Das folgende Beispiel enthält eine dynamische INSERT – Anweisung für eine Tabelle mit drei Spalten:

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

Dieses Beispiel fügt eine neue Zeile ein, für die die Spaltenwerte in den PL/SQL-Variablen deptnumber, deptname und location. Tabelle 8-3 zeigt Beispielcode, der diese DML-Operation mit dem Paket DBMS_SQL und nativem dynamischem SQL ausführt.,

Tabelle 8-3 DML-Operation Mit dem DBMS_SQL-Paket und Native Dynamic SQL

Ausführen von DML-mit RETURNING-Klausel Verwenden Dynamisches SQL: Beispiel

im folgenden Beispiel verwendet eine dynamische UPDATE – Anweisung zu aktualisieren den Standort einer Abteilung ist, dann gibt den name der Abteilung:

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

Tabelle 8-4 zeigt Beispiel-code, führt diese operation unter Verwendung der DBMS_SQL Paket-und native dynamic SQL.,

Tabelle 8-4 DML-Rückgabeoperation Mit dem DBMS_SQL-Paket und nativem dynamischem SQL

Mit dynamischem SQL in anderen Sprachen als PL/SQL

Obwohl in diesem Kapitel die PL/SQL-Unterstützung für dynamisches SQL erläutert wird, können Sie dynamisches SQL aus anderen Sprachen aufrufen:

  • Wenn Sie C/C++ verwenden, können Sie dynamisches SQL mit der Oracle Call Interface (OCI) aufrufen, oder Sie können den Pro*C/C++ – Vorkompiler verwenden, um dynamische SQL-Erweiterungen ihr C-Code.
  • Wenn Sie COBOL verwenden, können Sie den Pro*COBOL-Vorkompiler verwenden, um Ihrem COBOL-Code dynamische SQL-Erweiterungen hinzuzufügen.,
  • Wenn Sie Java verwenden, können Sie Anwendungen entwickeln, die dynamisches SQL mit JDBC verwenden.

Wenn Sie eine Anwendung haben, die OCI, Pro*C/C++ oder Pro*COBOL zum Ausführen von dynamischem SQL verwendet, sollten Sie in Betracht ziehen, zu nativem dynamischem SQL in PL/SQL zu wechseln gespeicherte Prozeduren und Funktionen. Die Netzwerk-Roundtrips, die zum Ausführen dynamischer SQL-Vorgänge aus clientseitigen Anwendungen erforderlich sind, können die Leistung beeinträchtigen. Gespeicherte Prozeduren können sich auf dem Server befinden, wodurch der Netzwerk-Overhead entfällt., Sie können die PL/SQL Stored Procedures und stored Functions aus der OCI -, Pro*C/C++ – oder Pro*COBOL-Anwendung aufrufen.,Siehe auch:

Informationen zum Aufrufen von Oracle stored procedures und stored Functions aus verschiedenen Sprachen finden Sie unter:

  • Oracle Call Interface Programmer ’s Guide
  • Pro*C/C++ Precompiler Programmer‘ s Guide
  • Pro*COBOL Precompiler Programmer ’s Guide
  • Oracle9i Java Stored Procedures Developer‘ s Guide

Verwenden von PL/SQL-Datensätzen in SQL INSERT-und UPDATE-Anweisungen

Obwohl Sie jedes Feld eines PL/SQL-Datensatzes beim Einfügen oder Aktualisieren von Zeilen in eine Tabelle aufzählen können, ist der resultierende Code nicht besonders lesbar oder wartbar., Stattdessen können Sie PL/SQL-Datensätze direkt in diesen Anweisungen verwenden. Die bequemste Technik besteht darin, den Datensatz mit einem %ROWTYPE-Attribut zu deklarieren, sodass er genau dieselben Felder wie die SQL-Tabelle enthält.

Obwohl diese Technik dazu beiträgt, PL/SQL-Variablen und-Typen enger in SQL-DML-Anweisungen zu integrieren, können Sie PL/SQL-Datensätze nicht als Bindungsvariablen in dynamischen SQL-Anweisungen verwenden.