Oracle
 sql >> Database >  >> RDS >> Oracle

Crea DDL tabella con Esegui immediatamente nel database Oracle Parte 2

Crea DDL tabella con Esegui immediatamente

Esistono due modi per scrivere una query DDL Crea tabella per l'istruzione Execute Immediate di Native Dynamic SQL in Oracle Database. Ne abbiamo già discusso uno nell'ultimo tutorial. Il primo modo di cui abbiamo discusso nel tutorial precedente è probabilmente il modo più semplice per scrivere una query SQL per SQL dinamico. Ma questo non ci impedisce di imparare ulteriormente. Quindi andiamo avanti e impariamo il secondo.

Quindi, in questo tutorial impareremo il secondo metodo per scrivere un DDL CREATE TABLE per l'esecuzione dinamica utilizzando Esegui istruzione immediata.

Poiché questo tutorial è in continuazione del precedente, quindi ti chiedo di consultare prima quel blog per una migliore comprensione. Detto questo, iniziamo il tutorial.

Fase 1:prepara il DDL CREATE TABLE.

Prepara in anticipo la tua query SQL che desideri eseguire in modo dinamico. Ciò ridurrà la confusione del codice e minimizzerà anche l'errore sintattico.

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

Ecco il nostro CREATE TABLE DDL. Fatta eccezione per il nome modificato e un vincolo di chiave primaria aggiunto, questo DDL è praticamente simile a quello che abbiamo creato nell'ultimo tutorial.

Passaggio 2:scrivi il blocco PL/SQL per l'esecuzione dinamica dell'istruzione DDL.

Ora che abbiamo preparato il nostro CREATE TABLE DDL. Scriviamo il programma PL/SQL per eseguirlo dinamicamente.

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;
/

Vediamo cosa abbiamo fatto in questo programma.

Sezione Dichiarazione .

DECLARE
    ddl_qry     VARCHAR2 (150);

Nella sezione di dichiarazione del nostro blocco PL/SQL abbiamo dichiarato una variabile con il nome ddl_qry. Questa variabile conterrà il nostro CREATE TABLE DDL che eseguiremo utilizzando l'istruzione Execute Immediate.

Come per l'ultimo tutorial, Execute Immediate tratta tutte le istruzioni SQL come una stringa di tipo di dati VARCHAR2. Ecco perché abbiamo dichiarato la nostra variabile ddl_qry come tipo di dati VARCHAR2.

Sezione di esecuzione.

Subito dopo la sezione di dichiarazione abbiamo la nostra sezione di esecuzione in cui sta accadendo tutto il divertimento.

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;
/

Questa sezione di esecuzione è composta solo da due istruzioni:

  1. Dichiarazione di incarico
  2. Esegui dichiarazione immediata

La prima affermazione che è la "Dichiarazione di assegnazione" rende questo codice diverso dal precedente. Vediamo quali sono queste affermazioni.

Dichiarazione 1:Dichiarazione di assegnazione.

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

Questa è l'unica affermazione che rende questo programma PL/SQL diverso da quello che abbiamo visto nel tutorial precedente.

In questa istruzione stiamo assegnando CREATE TABLE DDL alla variabile ddl_qry. Allora, cosa c'è di diverso qui?

Nel metodo precedente abbiamo racchiuso la nostra intera istruzione DDL in una coppia di virgolette singole ( ' ' ). Così

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

Primo modo di scrivere una query DDL

Considerando che qui nel secondo metodo invece di racchiudere l'intera query tra virgolette singole, l'abbiamo prima divisa in più stringhe di VARCHAR2. Questo lo abbiamo fatto racchiudendo ogni singola riga della query tra virgolette singole. Successivamente li abbiamo uniti tutti usando l'operatore concatenato ( || ) in modo che il motore PL/SQL li esegua come una singola unità.

Puoi guardare una dimostrazione dettagliata di questo approccio Break and Conquista per l'esecuzione dinamica nel tutorial video.

Lettura consigliata:Concat Function Vs Concat Operator.

Dichiarazione 2:esegui la dichiarazione immediata.

La nostra seconda affermazione è l'istruzione Execute Immediate. Esegue qualsiasi istruzione SQL che restituisce dinamicamente una singola riga del risultato. Nel nostro caso questa istruzione sta eseguendo una query DDL CREATE TABLE tramite un blocco PL/SQL.

Esistono solo due modi per eseguire un'istruzione DDL tramite un blocco PL/SQL in Oracle Database. O utilizzando il pacchetto DBMS_SQL o Esegui Immediato di Native Dynamic SQL. Leggi qui per sapere cos'altro puoi fare usando Esegui Immediato.

Per eseguire un DDL in modo dinamico, devi prima scrivere la frase riservata "Esegui Immediato". Seguito dal nome della variabile in cui hai memorizzato il tuo DDL come abbiamo fatto sopra.

Verifica se la tabella è stata creata o meno.

Esistono diversi modi per verificare se il blocco PL/SQL ha eseguito correttamente o meno il CREATE TABLE DDL. Ma qui ti mostrerò i due modi più semplici e popolari.

Utilizzo del comando DESCRIBE

Il modo più semplice per verificare se il blocco PL/SQL ha creato la tabella tut_83 correttamente o meno è utilizzare il comando DESCRIBE. Il comando Descrivi mostra la struttura della tabella citata, solo se esiste altrimenti restituisce un errore.

Proviamo quello

DESCRIBE tut_83;
Or 
DESC tut_83

Se durante l'esecuzione del comando descritto sopra si vede la struttura della tabella tut_83 allora significa che il blocco PL/SQL sopra ha creato la tabella con successo. Ma nel caso in cui ricevi un errore significa che hai sbagliato da qualche parte e l'esecuzione del blocco PL/SQL non è riuscita.

Utilizzo del dizionario dati ALL_OBJECTS.

Puoi anche interrogare il dizionario dati ALL_OBJECTS. Questo aiuta a scoprire se la tabella desiderata o qualsiasi altro oggetto che stai cercando di creare è stato creato o meno. Come questo

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

Questi sono due tra i tanti modi per scoprire se l'oggetto desiderato è stato creato correttamente.

Un'altra cosa prima di concludere questo tutorial. Si prega di leggere il blog precedente per una migliore comprensione di questo così come i prossimi tutorial.

Questo è il tutorial PL/SQL sul secondo modo di scrivere un CREATE TABLE DDL per l'esecuzione immediata dell'SQL dinamico nativo in Oracle Database.

Spero ti sia piaciuto leggere. Assicurati di iscriverti al canale YouTube. Perché nel prossimo tutorial impareremo come eliminare e modificare gli oggetti dello schema in modo dinamico.

Grazie e buona giornata!