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

Erstellen Sie eine Tabellen-DDL mit Execute Immediate In Oracle Database Part 2

Tabellen-DDL mit sofortiger Ausführung erstellen

Es gibt zwei Möglichkeiten, eine DDL-Abfrage zum Erstellen einer Tabelle für die Execute Immediate-Anweisung von Native Dynamic SQL in Oracle Database zu schreiben. Eine davon haben wir bereits im letzten Tutorial besprochen. Der erste Weg, den wir im vorherigen Tutorial besprochen haben, ist wahrscheinlich der einfachste Weg, eine SQL-Abfrage für Dynamic SQL zu schreiben. Aber das hindert uns nicht daran, weiter zu lernen. Also lass uns weitermachen und den zweiten lernen.

In diesem Tutorial lernen wir also die zweite Methode zum Schreiben einer CREATE TABLE DDL für die dynamische Ausführung mit Execute Immediate Statement.

Da dieses Tutorial eine Fortsetzung des vorherigen ist, bitte ich Sie, zum besseren Verständnis zuerst diesen Blog durchzugehen. Beginnen wir mit dem Tutorial.

Schritt 1:Bereiten Sie die CREATE TABLE DDL vor.

Bereiten Sie vorher Ihre SQL-Abfrage vor, die Sie dynamisch ausführen möchten. Dies reduziert die Code-Verwirrung und minimiert auch den syntaktischen Fehler.

CREATE TABLE tut_83 (
                tut_num     NUMBER(5),
                tut_name    VARCHAR2 (50),
                CONSTRAINT cons1_col1_pid_pk PRIMARY KEY (tut_num)
                )

Hier ist unsere CREATE TABLE DDL. Abgesehen vom geänderten Namen und einer hinzugefügten Primärschlüssel-Einschränkung ist diese DDL ziemlich ähnlich zu der, die wir im letzten Tutorial erstellt haben.

Schritt 2:Schreiben Sie den PL/SQL-Block für die dynamische Ausführung der DDL-Anweisung.

Jetzt haben wir unsere CREATE TABLE DDL vorbereitet. Lassen Sie uns das PL/SQL-Programm schreiben, um es dynamisch auszuführen.

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

Mal sehen, was wir in diesem Programm gemacht haben.

Der Deklarationsabschnitt .

DECLARE
    ddl_qry     VARCHAR2 (150);

Im Deklarationsabschnitt unseres PL/SQL-Blocks haben wir eine Variable mit dem Namen ddl_qry deklariert. Diese Variable enthält unsere CREATE TABLE DDL, die wir mit der Execute Immediate-Anweisung ausführen werden.

Gemäß dem letzten Tutorial behandelt Execute Immediate alle SQL-Anweisungen als Zeichenfolge des Datentyps VARCHAR2. Deshalb hatten wir unsere Variable ddl_qry als Datentyp VARCHAR2 deklariert.

Die Ausführungssektion.

Direkt nach dem Deklarationsabschnitt haben wir unseren Ausführungsabschnitt, in dem der ganze Spaß passiert.

BEGIN
    ddl_qry :=  'CREATE TABLE tut_83 ('||
                    'tut_num     NUMBER (5),'||
                    'tut_name    VARCHAR2 (50),'||
                    'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'||
                ')';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

Dieser Ausführungsabschnitt besteht nur aus zwei Anweisungen:

  1. Auftragserklärung
  2. Sofortige Anweisung ausführen

Die erste Anweisung, die „Zuweisungsanweisung“, unterscheidet diesen Code vom vorherigen. Mal sehen, was diese Aussagen sind.

Erklärung 1:Zuweisungserklärung.

ddl_qry :=  'CREATE TABLE tut_83 ('||
                    'tut_num     NUMBER (5),'||
                    'tut_name    VARCHAR2 (50),'||
                    'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'||
                ')';

Dies ist die einzige Anweisung, die dieses PL/SQL-Programm von dem unterscheidet, das wir im vorherigen Tutorial gesehen haben.

In dieser Anweisung weisen wir die CREATE TABLE DDL der Variablen ddl_qry zu. Was ist hier also anders?

In der vorherigen Methode haben wir unsere gesamte DDL-Anweisung in ein Paar einfacher Anführungszeichen (‘ ’) eingeschlossen. So

ddl_qry:= 'CREATE TABLE tut_82 (
                tut_num     NUMBER(3),
               	tut_name    VARCHAR2 (50)
               )';

Erste Art, eine DDL-Abfrage zu schreiben

Während wir hier in der zweiten Methode, anstatt die gesamte Abfrage in einfache Anführungszeichen einzuschließen, sie zuerst in mehrere Zeichenfolgen von VARCHAR2 unterteilt haben. Dazu haben wir jede einzelne Zeile der Abfrage in einfache Anführungszeichen gesetzt. Danach haben wir sie alle mit dem Verkettungsoperator ( || ) verbunden, sodass die PL/SQL-Engine sie als eine Einheit ausführt.

Sie können sich eine detaillierte Demonstration dieses Break-and-Conquer-Ansatzes für die dynamische Ausführung im Video-Tutorial ansehen.

Empfohlene Lektüre:Concat-Funktion vs. Concat-Operator.

Anweisung 2:Sofortige Anweisung ausführen.

Unsere zweite Anweisung ist die Execute Immediate-Anweisung. Es führt jede SQL-Anweisung aus, die eine einzelne Zeile des Ergebnisses dynamisch zurückgibt. In unserem Fall führt diese Anweisung eine CREATE TABLE DDL-Abfrage über einen PL/SQL-Block aus.

Es gibt nur zwei Möglichkeiten, eine DDL-Anweisung über einen PL/SQL-Block in Oracle Database auszuführen. Entweder mit dem DBMS_SQL-Paket oder mit Execute Immediate of Native Dynamic SQL. Lesen Sie hier, um zu erfahren, was Sie sonst noch mit Execute Immediate tun können.

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 gespeichert haben.

Überprüfen Sie, ob die Tabelle erstellt wurde oder nicht.

Es gibt mehrere Möglichkeiten zu prüfen, ob der PL/SQL-Block die CREATE TABLE DDL erfolgreich ausgeführt hat oder nicht. Aber hier zeige ich Ihnen die beiden einfachsten und beliebtesten Wege.

Verwendung des DESCRIBE-Befehls

Ob der PL/SQL-Block die Tabelle tut_83 erfolgreich angelegt hat oder nicht, lässt sich am einfachsten mit dem DESCRIBE-Befehl überprüfen. Der Describe-Befehl zeigt die Struktur der genannten Tabelle, nur wenn sie existiert, gibt sie sonst einen Fehler zurück.

Versuchen wir das

DESCRIBE tut_83;
Or 
DESC tut_83

Wenn Sie bei der Ausführung des obigen Beschreibungsbefehls die Struktur der Tabelle tut_83 sehen, bedeutet dies, dass der obige PL/SQL-Block die Tabelle erfolgreich erstellt hat. Aber falls Sie einen Fehler erhalten, bedeutet das, dass Sie irgendwo einen Fehler gemacht haben und die Ausführung des PL/SQL-Blocks nicht erfolgreich ist.

Verwendung von ALL_OBJECTS Datenwörterbuch.

Sie können auch ALL_OBJECTS Data Dictionary abfragen. Dies hilft herauszufinden, ob die gewünschte Tabelle oder ein anderes Objekt, das Sie erstellen möchten, erstellt wurde oder nicht. So

SELECT 'We created a table with name '||object_name||' in '
        ||owner||' schema on '||created
FROM all_objects WHERE object_name ='TUT_83';

Dies sind zwei von vielen Möglichkeiten, um herauszufinden, ob das gewünschte Objekt erfolgreich erstellt wurde.

Noch eine Sache, bevor Sie dieses Tutorial beenden. Bitte lesen Sie den vorherigen Blog, um dies besser zu verstehen, sowie die kommenden Tutorials.

Das ist das PL/SQL-Tutorial zum zweiten Weg, eine CREATE TABLE DDL für die Execute Immediate-Anweisung von Native Dynamic SQL in Oracle Database zu schreiben.

Ich hoffe, Sie hatten Spaß beim Lesen. Stellen Sie sicher, dass Sie den YouTube-Kanal abonnieren. Denn im nächsten Tutorial werden wir lernen, Schema-Objekte dynamisch zu löschen und zu ändern.

Vielen Dank und einen schönen Tag!