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

So führen Sie Create Table DDL mit EXECUTE IMMEDIATE in der Oracle-Datenbank aus

Tabellen-DDL mit sofortiger Ausführung erstellen

Sie müssen denken, was könnte das Problem bei der Ausführung einer CREATE TABLE DDL sein? Richtig, kein Problem, solange Sie sie mit SQL ausführen. Aber wenn es darum geht, sie mit PL/SQL auszuführen, ist es ziemlich schwierig.

Also zuerst, was sind DDL-Anweisungen in Oracle Database?

DDL steht für Data Definition Language. Mit DDL-Anweisungen können wir die Datenbankobjekte sowie die Schemas erstellen oder ändern. Diese Anweisungen sind:

  • ERSTELLEN,
  • DROP und
  • ÄNDERN.

Es empfiehlt sich immer, Ihre Schemas und Objekte im Voraus zu entwerfen und sie in der Anfangsphase Ihres Projekts zu erstellen. Wenn möglich, sollten wir diese Arbeit mit SQL erledigen. Das könnte viel schneller und viel sauberer sein. Aber manchmal ist es nicht immer möglich, in dieser Situation können wir auf Funktionen wie Native Dynamic SQL in Oracle Database zurückgreifen.

Natives dynamisches SQL ermöglicht es uns, SQL-Anweisungen wie DDL oder DML direkt über unser PL/SQL auszuführen.

Warum können wir DDL nicht über ein PL/SQL-Programm ausführen?

Wenn Sie sich immer noch fragen, ob das Ausführen von DDL-Anweisungen mit PL/SQL so kompliziert ist, versuchen wir, eine Tabelle über ein PL/SQL-Programm zu erstellen.

SET SERVEROUTPUT ON;
BEGIN 
    CREATE TABLE tut_82 (
    tut_num NUMBER(3),
    tut_name   VARCHAR2 (50));  
END;
/

Ich weiß, dass dieser Ansatz Ihr erster Gedanke gewesen wäre, wenn ich Sie gebeten hätte, eine Tabelle über ein PL/SQL-Programm zu erstellen. Ich meine, das sieht perfekt aus, was könnte schon schief gehen?

An diesem Programm ist nichts auszusetzen, das einzige Problem dabei ist, dass PL/SQL DDL-Anweisungen nicht direkt unterstützt. Um eine DDL-Anweisung mit PL/SQL auszuführen, müssen wir entweder das DBMS_SQL-Paket oder den erweiterten und verbesserten Weg von NATIVE DYNAMIC SQL verwenden.

Sie können dies selbst überprüfen. Fahren Sie fort und führen Sie das obige Programm aus. Bei der Ausführung erhalten Sie einen Fehler, der etwa so aussieht wie im Bild unten gezeigt.

Was ist also der richtige Weg, um eine DDL über ein PL/SQL-Programm auszuführen?

Sie können ein DDL über PL/SQL-Programm entweder mit dem DBMS_SQL-Paket oder mit der Execute Immediate-Anweisung von Native Dynamic SQL ausführen. Die letztere Option wird am häufigsten verwendet, insbesondere heutzutage wegen ihrer besseren Leistung und der leicht zu erlernenden Syntax.

Wie führe ich CREATE TABLE DDL mit Execute Immediate in Oracle Database aus?

Schritt 1:Bereiten Sie Ihre DDL im Voraus vor.

Obwohl es nicht notwendig ist, schlage ich vor, dass Sie Ihre DDL vorher vorbereiten, damit Sie zumindest die Wahrscheinlichkeit beseitigen können, dass aufgrund der Syntax Ihrer DDL-Anweisung syntaktische Fehler auftreten.

In unserem Fall möchten wir eine CREATE TABLE DDL ausführen, also schreiben wir zuerst eine DDL zum Erstellen einer Tabelle.

CREATE TABLE tut_82 (
    tut_num    NUMBER (3),
    tut_name   VARCHAR2 (50)
) 

Diese DDL-Anweisung erstellt eine Tabelle mit dem Namen tut_82 mit zwei Spalten tut_num vom Datentyp NUMBER und tut_name vom Datentyp VARCHAR2.

Achten Sie hier darauf, dass Sie Ihre SQL-Anweisung (diejenige, die Sie mit EXECUTE IMMEDIATE ausführen möchten) nicht mit einem Semikolon beenden.

Schritt 2:Führen Sie Ihr DDL-durch-PL/SQL-Programm mit Execute Immediate aus.

Sobald Sie Ihre DDL vorbereitet haben, müssen Sie als nächstes Ihr PL/SQL-Programm schreiben.

SET SERVEROUTPUT ON;
DECLARE
    ddl_qry     VARCHAR2 (150);
BEGIN
    ddl_qry := 'CREATE TABLE tut_82(
                tut_num     NUMBER(3),
                tut_name    VARCHAR2(50)
                )';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

Im obigen PL/SQL-Block haben wir eine Variable mit dem Namen ddl_qry deklariert. Wir haben diese Variable zum Speichern unserer DDL-Anweisung verwendet, die wir in Schritt 1 vorbereitet haben.

Info:
Eine Sache, die Sie hier sicherstellen müssen, ist, dass die Variable, die Sie zum Halten der SQL-Anweisung verwenden, die Sie mit Ihrer EXECUTE IMMEDIATE-Anweisung ausführen möchten, immer vom Datentyp VARCHAR2 sein muss und haben viel Datenbreite damit Ihre DDL problemlos hineinpasst.

Im Ausführungsabschnitt dieses PL/SQL-Blocks haben wir zwei ausführbare Anweisungen. Diese Anweisungen sind:

Anweisung 1:Zuweisungsanweisung

In der ersten Anweisung haben wir unsere Create Table DDL mit dem Zuweisungsoperator in der Variablen ddl_qry gespeichert (In PL/SQL ist der Zuweisungsoperator die Kombination aus Doppelpunkten und Gleichheitszeichen).

Aussage 2:Die Mighty Execute Immediate-Aussage

Die zweite Anweisung ist die Execute-Anweisung. Um eine DDL dynamisch auszuführen, müssen Sie zuerst den reservierten Ausdruck „Execute Immediate“ schreiben, gefolgt von dem Variablennamen, in dem Sie Ihre DDL wie oben beschrieben gespeichert haben.

Wenn Sie möchten, können Sie Ihre DDL auch direkt nach dem Ausdruck „Reserved Phrase“ schreiben. Es ist eine ganz persönliche Entscheidung. Ich verwende gerne den ersteren Ansatz, bei dem wir Variable zum Halten der DDL verwenden, weil es erstens Ihren Code ordentlich und sauber aussehen lässt und außerdem die Fehlersuche viel einfacher macht.

Aber Manish, ich möchte auch die andere Schreibweise der DDL-Anweisung lernen.

Sicher, es ist nichts falsch daran, etwas Neues zu lernen.

BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tut_82(
                	tut_num     NUMBER(3),
                	tut_name    VARCHAR2(50)
                )';
END;
/

Der alternative Ansatz zum obigen Code besteht darin, die DDL-Anweisung direkt in Ihre Execute Immediate-Anweisung zu schreiben. Dazu müssen Sie nur zuerst die reservierte Phrase Execute Immediate schreiben, gefolgt von der DDL-Anweisung, die Sie dynamisch ausführen möchten.

In beiden Fällen müssen Sie sich nur um ein paar Dinge kümmern, während Sie die DDL für Execute Immediate schreiben.

Erstens:Schließen Sie Ihre SQL-Anweisung immer in zwei einfache Anführungszeichen ein

Denken Sie immer daran, dass Execute Immediate DDL oder DML oder alle anderen unterstützten SQL-Anweisungen, die Sie dynamisch ausführen möchten, als eine Zeichenfolge vom Datentyp VARCHAR2 behandelt und in PL/SQL schließen wir jedes Zeichen oder jeden VARCHAR2-String in ein Paar einfache Anführungszeichen ein. Stellen Sie daher immer sicher, dass Sie Ihre SQL-Anweisung, die Sie mit Execute Immediate ausführen möchten, in ein Paar einfache Anführungszeichen setzen.

Zweitens:Achten Sie auf das Semikolon.

Falls Sie eine SQL-Anweisung für Execute Immediate schreiben, müssen Sie das Semikolon (;) direkt außerhalb der einfachen Anführungszeichen setzen, in die Sie Ihre SQL-Anweisung eingeschlossen haben. Wenn Sie andererseits einen PL/SQL-Block für die dynamische Ausführung mit Execute Immediate schreiben, müssen Sie das Semikolon am Ende Ihres PL/SQL-Blocks direkt vor das schließende einfache Anführungszeichen sowie direkt außerhalb der schließenden einfachen Anführungszeichen setzen.

Dies ist das ausführliche Tutorial zum Ausführen der Create Table DDL-Anweisung mit der EXECUTE IMMEDIATE-Anweisung von Native Dynamic SQL in Oracle Database. Ich hoffe, es hat Ihnen gefallen und Sie haben etwas Neues gelernt.

Bitte stellen Sie sicher, dass Sie meinen YouTube-Kanal abonnieren, da wir im nächsten Tutorial etwas Neues und Interessantes über Dynamic SQL lernen werden. Sie können mir auch auf meinem Twitter und Facebook folgen.

Vielen Dank und einen schönen Tag!