Esegui immediatamente con la clausola INTO
L'SQL dinamico nativo o NDS aiuta gli sviluppatori fornendo flessibilità, migliorando le prestazioni e semplificando le sintassi di programmazione. Oggi in questo tutorial impareremo come scrivere una query SQL dinamica in Oracle Database utilizzando Esegui istruzione immediata.
Quindi cos'è un'istruzione Execute Immediate in Oracle Database?
Utilizzando Execute Immediate possiamo analizzare ed eseguire dinamicamente qualsiasi istruzione SQL o un blocco PL/SQL in Oracle Database. E per dinamica intendo in fase di esecuzione.
Esegui immediato richiede solo un argomento. Può essere un'istruzione SQL o un blocco PL/SQL. Il compilatore considera gli argomenti dell'istruzione Execute Immediate come la stringa di tipi di dati VARCHAR2. Assicurati quindi di racchiudere la tua query SQL o il blocco PL/SQL nella coppia di virgolette singole ( ' ' ).
Possiamo utilizzare qualsiasi istruzione SQL con Esegui Immediato?
Qualsiasi istruzione SQL o blocco PL/SQL che restituisce una singola riga di risultati può essere utilizzata con Esegui Immediato. Inoltre, se la tua istruzione restituisce più di una riga di risultati, ci sono altri modi. Inoltre, ne parleremo in futuri tutorial.
Qual è la sintassi di Esegui dichiarazione immediata?
La sintassi dell'istruzione Execute Immediate è piuttosto semplice. Diamo un'occhiata.
EXECUTE IMMEDIATE dynamic_query [INTO user_defined_variable-1, user_defined_variable-2…] [USING bind_argument-1, bind_argument-2…] [RETURNING|RETURN-INTO clause];
Dove:
Esegui immediatamente :Esegui Immediato è una frase riservata.
Dynamic_query :Seguito dalla frase riservata dobbiamo scrivere la nostra query dinamica. Questa query potrebbe essere un'istruzione SQL o un blocco PL/SQL. Inoltre il compilatore tratta la query dinamica come una stringa di tipo dati VARCHAR2. Pertanto devi assicurarti di racchiudere la tua query tra virgolette singole.
Clausola INTO :Usando la clausola INTO specifichiamo l'elenco delle variabili definite dall'utente. Inoltre, conterranno i valori restituiti dall'istruzione SELECT dinamica. È molto simile all'istruzione SELECT-INTO. Inoltre è una clausola facoltativa, quindi se non la richiedi puoi ometterla.
Clausola USING :Nel caso in cui tu abbia utilizzato una variabile di collegamento nella tua query dinamica, questa clausola ti consentirà di specificare i valori per quella variabile di collegamento. Questi a loro volta verranno sostituiti di conseguenza durante il runtime. Anche in questo caso, è una clausola facoltativa.
RITORNO oppure RITORNO IN clausola:Il ritorno nella clausola è opposto alla clausola USING. Mentre nella clausola using forniamo i valori alla query dinamica qui nella clausola RETURNING INTO otteniamo i valori restituiti dalla query dinamica. E memorizzali nell'elenco specificato di argomenti di collegamento. Anche in questo caso è una clausola facoltativa.
Puoi anche guardare la spiegazione dettagliata della sintassi sopra nel video corrispondente qui.
Esempio di Esegui istruzione immediata.
Fare una dimostrazione di esecuzione immediata utilizzando tutte le clausole sopra menzionate aumenterà la complessità e renderà l'esempio di difficile comprensione. Che è esattamente l'opposto di ciò che vogliamo.
Quindi, per mantenere il concetto semplice e facile da imparare, faremo l'esempio di Execute Immediate usando la prima clausola che è INTO.
Esegui immediatamente con clausola INTO.
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; /
Ecco un esempio molto semplice che mostra come utilizzare esegui immediato con INTO clausola nel database Oracle. Vediamo cosa abbiamo fatto qui.
Sezione Dichiarazione
Nella sezione dichiarazione abbiamo dichiarato due variabili. La prima variabile è sql_qry di tipo VARCHAR 2. Useremo questa variabile per memorizzare l'istruzione SELECT che vogliamo eseguire con la nostra istruzione EXECUTE IMMEDIATE. Poiché questa variabile conterrà un'istruzione DML, quindi dobbiamo assicurarci che abbia una larghezza di dati sufficiente.
La seconda è la variabile definita dall'utente emp_tot. Useremo questa variabile con la clausola INTO per contenere i dati restituiti dalla nostra istruzione SELECT.
Sezione di esecuzione
In questa sezione abbiamo solo tre affermazioni. Questi sono:
Dichiarazione 1 :
Nella prima istruzione stiamo assegnando una query SQL valida alla variabile sql_qry.
Dichiarazione 2 :
La seconda istruzione è l'istruzione EXECUTE IMMEDIATE – INTO. In questa istruzione subito dopo aver scritto la frase riservata execute immediate scriviamo il nome della variabile sql_qry. La stessa variabile in cui memorizziamo l'istruzione SELECT.
Al momento dell'esecuzione, il motore di runtime sostituirà questa variabile con il contenuto che contiene, che nel nostro caso è un'istruzione SELECT. Se non ci sono errori, il motore di runtime eseguirà l'istruzione SELECT sottostante. Successivamente restituisci il suo risultato se ce n'è.
Nel frattempo, la nostra istruzione SELECT restituirà un valore che è il numero totale di righe della tabella dipendenti. Usando la clausola INTO dell'istruzione EXECUTE IMMEDIATE memorizzeremo quel valore di ritorno nella variabile emp_tot.
Dichiarazione 3 :
La terza istruzione è un'istruzione di output con la quale stiamo visualizzando il valore della variabile emp_tot all'utente.
Informazioni:
In caso di transazione DML è richiesto un commit esplicito poiché Execute Immediate non eseguirà automaticamente il commit di una transazione DML.
Un modo alternativo per scrivere questa sezione di esecuzione è:
BEGIN EXECUTE IMMEDIATE 'SELECT count (*) FROM employees' INTO emp_tot; DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot); END; /
Se vuoi, puoi saltare completamente la prima affermazione. Basta scrivere la query SQL direttamente dopo la frase riservata ESEGUI IMMEDIATO.
Guarda il video sul mio canale YouTube per sapere qual è il modo corretto di scrivere la query per Esegui Immediato.
Cosa ne pensate?
Personalmente mi piace il primo modo in cui abbiamo usato la variabile per memorizzare la query. E in seguito ha usato quella variabile con Esegui Immediato. Perché questo rende il nostro codice pulito e ordinato. Inoltre ci aiuta a tenere traccia della nostra query nel caso in cui dovessimo cambiarla o modificarla.
Che cosa ne pensate? Quale modo di scrivere Execute Immediate ti piace di più? Il primo o il secondo. Dimmi le tue opinioni sulla mia pagina Facebook o sul mio Twitter.
Se ritieni che l'apprendimento attraverso la visione di video sia molto conveniente, puoi guardare il video sul mio canale YouTube. E scopri di più su Esegui Immediato con la clausola INTO.
Finora in questo tutorial abbiamo appreso cos'è l'istruzione Execute Immediate e come utilizzarla per eseguire dinamicamente una query SQL utilizzando la clausola INTO in Oracle Database. Penso che sia abbastanza per questo tutorial. Manteniamolo semplice non allungandolo ulteriormente.
Assicurati di iscriverti al mio canale YouTube per ulteriori tutorial interessanti.
Grazie e buona giornata!