Crea DDL tabella con Esegui immediatamente
Devi pensare che quale potrebbe essere il problema nell'esecuzione di un CREATE TABLE DDL? Giusto, nessun problema fintanto che li esegui con SQL. Ma quando si tratta di eseguirli con PL/SQL, è piuttosto difficile.
Per prima cosa, cosa sono le istruzioni DDL in Oracle Database?
DDL sta per Data Definition Language. Usando le istruzioni DDL possiamo creare o modificare gli oggetti del database così come gli schemi. Queste affermazioni sono:
- CREA,
- DROP e
- ALTER.
È sempre buona norma predisporre in anticipo gli schemi e gli oggetti e crearli nella fase iniziale del progetto. Se possibile, allora dovremmo fare questo lavoro usando SQL. Potrebbe essere molto più veloce e molto più pulito. Ma a volte non è sempre possibile, in quella situazione possiamo avvalerci di funzionalità come Native Dynamic SQL in Oracle Database.
Native Dynamic SQL ci consente di eseguire istruzioni SQL come DDL o DML attraverso il nostro PL/SQL.
Perché non possiamo eseguire DDL tramite un programma PL/SQL?
Se ti stai ancora chiedendo se eseguire l'istruzione DDL con PL/SQL sia così complicato, allora proviamo a creare una tabella tramite un programma PL/SQL.
SET SERVEROUTPUT ON; BEGIN CREATE TABLE tut_82 ( tut_num NUMBER(3), tut_name VARCHAR2 (50)); END; /
So che questo approccio sarebbe stato il tuo primo pensiero se ti avessi chiesto di creare una tabella tramite un programma PL/SQL. Voglio dire, sembra perfetto, cosa potrebbe andare storto?
Non c'è niente di sbagliato in questo programma, l'unico problema qui è che PL/SQL non supporta direttamente le istruzioni DDL. Per eseguire un'istruzione DDL utilizzando PL/SQL, è necessario avvalersi dell'aiuto del pacchetto DBMS_SQL o del modo avanzato e migliorato di NATIVE DYNAMIC SQL.
Puoi verificarlo tu stesso. Vai avanti ed esegui il programma sopra. Durante l'esecuzione riceverai un errore simile a quello mostrato nell'immagine qui sotto.
Quindi, qual è il modo corretto di eseguire un DDL tramite il programma PL/SQL?
È possibile eseguire un DDL tramite il programma PL/SQL utilizzando il pacchetto DBMS_SQL o utilizzando l'istruzione Execute Immediate di Native Dynamic SQL. Quest'ultima opzione è la più utilizzata, specialmente oggigiorno grazie alle sue prestazioni migliori e alla sintassi facile da imparare.
Come eseguire CREATE TABLE DDL utilizzando Esegui Immediato in Oracle Database?
Passaggio 1:prepara il tuo DDL in anticipo.
Anche se non è necessario, ma ti suggerisco di preparare il tuo DDL in anticipo, in questo modo puoi almeno eliminare le possibilità di ottenere errori sintattici a causa della sintassi della tua istruzione DDL.
Nel nostro caso, vogliamo eseguire un CREATE TABLE DDL, quindi scriviamo prima un DDL per creare una tabella.
CREATE TABLE tut_82 ( tut_num NUMBER (3), tut_name VARCHAR2 (50) )
Questa istruzione DDL creerà una tabella con il nome tut_82 con due colonne tut_num di tipo di dati NUMBER e tut_name di tipo di dati VARCHAR2.
Attenzione, non terminare la tua istruzione SQL (quella che vuoi eseguire con ESEGUI IMMEDIATO) con un punto e virgola.
Passaggio 2:esegui il tuo DDL tramite il programma PL/SQL utilizzando Esegui Immediato.
Una volta che hai preparato il tuo DDL, devi scrivere il tuo programma PL/SQL.
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; /
Nel blocco PL/SQL sopra abbiamo dichiarato una variabile con il nome ddl_qry. Abbiamo usato questa variabile per contenere la nostra istruzione DDL che abbiamo preparato nel passaggio 1.
Informazioni:
Una cosa di cui devi assicurarti qui è che, la variabile che utilizzerai per contenere l'istruzione SQL che desideri eseguire con la tua istruzione EXECUTE IMMEDIATE deve sempre essere del tipo di dati VARCHAR2> e avere molta larghezza di dati in modo che il tuo DDL possa inserirci facilmente.
Nella sezione di esecuzione di questo blocco PL/SQL abbiamo due istruzioni eseguibili. Queste affermazioni sono:
Dichiarazione 1:Dichiarazione di assegnazione
Nella prima istruzione abbiamo memorizzato il nostro DDL Create Table nella variabile ddl_qry utilizzando l'operatore di assegnazione (in PL/SQL l'operatore di assegnazione è la combinazione di due punti e uguale al segno).
Dichiarazione 2:la dichiarazione di Mighty Execute Immediate
La seconda istruzione è l'istruzione Execute. Per eseguire un DDL in modo dinamico, devi prima scrivere la frase riservata "Esegui immediatamente" seguita dal nome della variabile in cui hai memorizzato il tuo DDL come abbiamo fatto sopra.
Se vuoi puoi anche scrivere il tuo DDL direttamente dopo la frase "Frase riservata". È una scelta completamente personale. Mi piace usare il primo approccio in cui utilizziamo la variabile per contenere il DDL perché prima di tutto rende il tuo codice pulito e ordinato, inoltre rende molto più semplice la traccia degli errori.
Ma Manish, voglio imparare anche l'altro modo di scrivere la dichiarazione DDL.
Certo, non c'è niente di sbagliato nell'imparare qualcosa di nuovo.
BEGIN EXECUTE IMMEDIATE 'CREATE TABLE tut_82( tut_num NUMBER(3), tut_name VARCHAR2(50) )'; END; /
L'approccio alternativo al codice precedente consiste nello scrivere l'istruzione DDL direttamente all'interno dell'istruzione Execute Immediate. Per questo devi solo scrivere prima la frase riservata Execute Immediate seguita dall'istruzione DDL che vuoi eseguire dinamicamente.
In entrambi i modi devi solo occuparti di alcune cose mentre scrivi il DDL per Esegui Immediato.
Primo:racchiudi sempre la tua istruzione SQL in una coppia di virgolette singole
Ricorda sempre che Esegui Immediato tratta DDL o DML o qualsiasi altra istruzione SQL supportata che desideri eseguire dinamicamente come una stringa di tipo di dati VARCHAR2 e in PL/SQL racchiudiamo qualsiasi carattere o stringa VARCHAR2 in una coppia di virgolette singole. Quindi assicurati sempre di racchiudere la tua istruzione SQL che vuoi eseguire utilizzando Esegui Immediato tra una coppia di virgolette singole.
Secondo:prenditi cura del punto e virgola.
Nel caso in cui tu stia scrivendo un'istruzione SQL per Execute Immediate, devi inserire il punto e virgola (;) appena fuori dalle virgolette singole in cui hai racchiuso la tua istruzione SQL. D'altra parte, se stai scrivendo un blocco PL/SQL per l'esecuzione dinamica utilizzando Esegui Immediato, devi inserire il punto e virgola alla fine del blocco PL/SQL subito prima dell'apice singolo di chiusura e subito fuori gli apici singoli di chiusura.
Questo è il tutorial dettagliato su come eseguire l'istruzione Create Table DDL utilizzando l'istruzione EXECUTE IMMEDIATE di Native Dynamic SQL in Oracle Database. Spero ti sia piaciuto e hai imparato qualcosa di nuovo.
Assicurati di iscriverti al mio canale YouTube poiché nel prossimo tutorial impareremo qualcosa di nuovo e interessante su Dynamic SQL. Potete anche seguirmi sul mio Twitter e Facebook.
Grazie e buona giornata!