Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So verwenden Sie die Execute Immediate With INTO-Klausel in der Oracle-Datenbank

Sofort mit INTO-Klausel ausführen

Natives dynamisches SQL oder NDS hilft Entwicklern, indem es Flexibilität bietet, die Leistung verbessert und die Programmiersyntax vereinfacht. Heute werden wir in diesem Tutorial lernen, wie man eine dynamische SQL-Abfrage in Oracle Database mit Execute Immediate Statement schreibt.

Was ist also ein Execute Immediate Statement in Oracle Database?

Mit Execute Immediate können wir jede SQL-Anweisung oder einen PL/SQL-Block dynamisch in der Oracle-Datenbank parsen und ausführen. Und mit dynamisch meine ich zur Laufzeit.

Sofort ausführen nimmt nur ein Argument entgegen. Es kann entweder eine SQL-Anweisung oder ein PL/SQL-Block sein. Der Compiler behandelt die Argumente der Execute Immediate-Anweisung als die Zeichenfolge von VARCHAR2-Datentypen. Stellen Sie daher sicher, dass Sie Ihre SQL-Abfrage oder Ihren PL/SQL-Block in das Paar einfacher Anführungszeichen ( ‘ ’) einschließen.

Können wir jede SQL-Anweisung mit Execute Immediate verwenden?

Jede SQL-Anweisung oder jeder PL/SQL-Block, der eine einzelne Ergebniszeile zurückgibt, kann mit Execute Immediate verwendet werden. Wenn Ihre Anweisung mehr als eine Ergebniszeile zurückgibt, gibt es außerdem andere Möglichkeiten. Darüber hinaus werden wir diese in zukünftigen Tutorials besprechen.

Was ist die Syntax von Execute Immediate Statement?

Die Syntax der Execute Immediate-Anweisung ist ziemlich einfach. Werfen wir einen Blick darauf.

EXECUTE IMMEDIATE dynamic_query
[INTO user_defined_variable-1, user_defined_variable-2…]
[USING bind_argument-1, bind_argument-2…]
[RETURNING|RETURN-INTO clause];  

Wo:

Sofort ausführen :Execute Immediate ist ein reservierter Ausdruck.

Dynamische_Abfrage :Gefolgt von der reservierten Phrase müssen wir unsere dynamische Abfrage schreiben. Diese Abfrage kann eine SQL-Anweisung oder ein PL/SQL-Block sein. Darüber hinaus behandelt der Compiler die dynamische Abfrage als eine Zeichenfolge vom Datentyp VARCHAR2. Daher müssen Sie sicherstellen, dass Sie Ihre Abfrage in einfache Anführungszeichen setzen.

INTO-Klausel :Mit der INTO-Klausel geben wir die Liste der benutzerdefinierten Variablen an. Darüber hinaus enthalten diese die Werte, die von der dynamischen SELECT-Anweisung zurückgegeben werden. Sie ist der SELECT-INTO-Anweisung sehr ähnlich. Außerdem ist es eine optionale Klausel. Wenn Sie sie also nicht benötigen, können Sie sie weglassen.

USING-Klausel :Falls Sie in Ihrer dynamischen Abfrage eine Bindevariable verwendet haben, können Sie mit dieser Klausel die Werte für diese Bindevariable angeben. Diese wiederum werden zur Laufzeit entsprechend ersetzt. Auch hier handelt es sich um eine optionale Klausel.

RÜCKKEHR oder ZURÜCK IN Klausel:Return into-Klausel ist das Gegenteil der USING-Klausel. Während wir in der using-Klausel die Werte für die dynamische Abfrage bereitstellen, erhalten wir hier in der RETURNING INTO-Klausel die von der dynamischen Abfrage zurückgegebenen Werte. Und speichern Sie sie in der angegebenen Liste von Bindeargumenten. Auch hier handelt es sich um eine optionale Klausel.

Sie können sich die ausführliche Erklärung der obigen Syntax auch im entsprechenden Video hier ansehen.

Beispiel für eine Execute Immediate-Anweisung.

Eine Demonstration von Execute Immediate unter Verwendung aller oben erwähnten Klauseln wird die Komplexität erhöhen und das Beispiel schwer verständlich machen. Das ist genau das Gegenteil von dem, was wir wollen.

Um das Konzept einfach und leicht erlernbar zu halten, führen wir das Beispiel von Execute Immediate mit der ersten Klausel aus, die INTO.

ist

Sofort mit INTO-Klausel ausführen.

SET SERVEROUTPUT ON;
DECLARE
    sql_qry     VARCHAR2 (150);
    emp_tot     NUMBER(3);
BEGIN
    
    sql_qry:= ‘SELECT count (*) FROM employees';
    EXECUTE IMMEDIATE sql_qry INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot);

END;
/

Hier ist ein sehr einfaches Beispiel, das demonstriert, wie man Execute Immediate mit INTO verwendet -Klausel in der Oracle-Datenbank. Mal sehen, was wir hier gemacht haben.

Erklärungsabschnitt

Im Deklarationsabschnitt haben wir zwei Variablen deklariert. Die erste Variable ist sql_qry vom Typ VARCHAR 2. Wir verwenden diese Variable, um die SELECT-Anweisung zu speichern, die wir mit unserer EXECUTE IMMEDIATE-Anweisung ausführen möchten. Da diese Variable eine DML-Anweisung enthalten wird, müssen wir sicherstellen, dass sie eine ausreichende Datenbreite hat.

Die zweite ist die benutzerdefinierte Variable emp_tot. Wir werden diese Variable mit der INTO-Klausel verwenden, um die von unserer SELECT-Anweisung zurückgegebenen Daten zu speichern.

Ausführungsabschnitt

In diesem Abschnitt haben wir nur drei Aussagen. Diese sind:

Erklärung 1 :

In der ersten Anweisung weisen wir der Variablen sql_qry.

eine gültige SQL-Abfrage zu

Erklärung 2

Die zweite Anweisung ist die EXECUTE IMMEDIATE – INTO-Anweisung. In diese Anweisung schreiben wir direkt nach dem Schreiben des reservierten Ausdrucks execute once den Namen der Variablen sql_qry. Dieselbe Variable, in der wir die SELECT-Anweisung speichern.

Bei der Ausführung ersetzt die Laufzeit-Engine diese Variable durch den Inhalt, den sie enthält, was in unserem Fall eine SELECT-Anweisung ist. Wenn kein Fehler vorliegt, führt die Laufzeitmaschine die zugrunde liegende SELECT-Anweisung aus. Geben Sie danach das Ergebnis zurück, falls es eines gibt.

In der Zwischenzeit gibt unsere SELECT-Anweisung einen Wert zurück, der die Gesamtzahl der Zeilen der Mitarbeitertabelle darstellt. Unter Verwendung der INTO-Klausel der EXECUTE IMMEDIATE-Anweisung speichern wir diesen Rückgabewert in der Variablen emp_tot.

Erklärung 3 :

Die dritte Anweisung ist eine Ausgabeanweisung, mit der wir dem Benutzer den Wert der emp_tot-Variablen zurückgeben.

Info:
Im Falle einer DML-Transaktion ist ein explizites Commit erforderlich, da Execute Immediate nicht automatisch eine DML-Transaktion festschreibt.

Eine alternative Schreibweise dieses Ausführungsabschnitts ist:

BEGIN
    EXECUTE IMMEDIATE 'SELECT count (*) FROM employees' INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot); 
END;
/

Wenn Sie möchten, können Sie die erste Anweisung komplett überspringen. Schreiben Sie einfach die SQL-Abfrage direkt nach der reservierten Phrase EXECUTE IMMEDIATE.

Bitte sehen Sie sich das Video auf meinem YouTube-Kanal an, um zu erfahren, wie die Abfrage für Execute Immediate richtig geschrieben wird.

Was denkt ihr?

Mir persönlich gefällt die frühere Methode, bei der wir die Variable zum Speichern der Abfrage verwendet haben. Und später diese Variable mit Execute Immediate verwendet. Denn dadurch sieht unser Code ordentlich und sauber aus. Darüber hinaus hilft es uns, unsere Abfrage im Auge zu behalten, falls wir sie jemals ändern oder modifizieren möchten.

Was denkt ihr? Welche Schreibweise von Execute Immediate gefällt dir am besten? Das erstere oder das letztere. Sagen Sie mir Ihre Meinung auf meiner Facebook-Seite oder auf meinem Twitter.

Wenn Sie das Lernen durch das Ansehen von Videos als bequem empfinden, können Sie sich das Video auf meinem YouTube-Kanal ansehen. Und erfahren Sie mehr über Execute Immediate with INTO-Klausel.

Bisher haben wir in diesem Tutorial gelernt, was das Execute Immediate Statement ist und wie man es zum dynamischen Ausführen einer SQL-Abfrage mit der INTO-Klausel in Oracle Database verwendet. Ich denke, das reicht für dieses Tutorial. Halten wir es einfach, indem wir es nicht weiter ausdehnen.

Stellen Sie sicher, dass Sie meinen YouTube-Kanal für weitere interessante Tutorials abonnieren.

Vielen Dank und einen schönen Tag!