Oracle Procedure memorizzate e funzioni PL/SQL con esempi
Procedure e Funzioni sono i sottoprogrammi che possono essere creati e salvati nel database come oggetti di database. Possono essere chiamati o riferiti anche all'interno degli altri blocchi.
Oltre a questo, tratteremo le principali differenze tra questi due sottoprogrammi. Inoltre, discuteremo di Oracle funzioni integrate.
Terminologie nei sottoprogrammi PL/SQL
Prima di conoscere i sottoprogrammi PL/SQL, discuteremo le varie terminologie che fanno parte di questi sottoprogrammi. Di seguito sono riportate le terminologie di cui parleremo.
Parametro
Il parametro รจ variabile o segnaposto di qualsiasi valore valido Tipo di dati PL/SQL attraverso il quale il sottoprogramma PL/SQL scambia i valori con il codice principale. Questo parametro consente di fornire input ai sottoprogrammi e di esportaretract da questi sottoprogrammi.
- Questi parametri dovrebbero essere definiti insieme ai sottoprogrammi al momento della creazione.
- Questi parametri sono inclusi nell'istruzione di chiamata di questi sottoprogrammi per interagire i valori con i sottoprogrammi.
- Il tipo di dati del parametro nel sottoprogramma e l'istruzione chiamante dovrebbero essere gli stessi.
- La dimensione del tipo di dati non dovrebbe essere menzionata al momento della dichiarazione del parametro, poichรฉ la dimensione รจ dinamica per questo tipo.
In base al loro scopo i parametri sono classificati come
- Parametro IN
- Parametro OUT
- Parametro IN OUT
Parametro IN
- Questo parametro viene utilizzato per fornire input ai sottoprogrammi.
- ร una variabile di sola lettura all'interno dei sottoprogrammi. I loro valori non possono essere modificati all'interno del sottoprogramma.
- Nell'istruzione chiamante, questi parametri possono essere una variabile o un valore letterale o un'espressione, ad esempio potrebbe essere l'espressione aritmetica come '5*8' o 'a/b' dove 'a' e 'b' sono variabili .
- Di default i parametri sono di tipo IN.
Parametro OUT
- Questo parametro viene utilizzato per ottenere l'output dai sottoprogrammi.
- ร una variabile di lettura-scrittura all'interno dei sottoprogrammi. I loro valori possono essere modificati all'interno dei sottoprogrammi.
- Nell'istruzione chiamante, questi parametri dovrebbero sempre essere una variabile per contenere il valore dei sottoprogrammi correnti.
Parametro IN OUT
- Questo parametro viene utilizzato sia per fornire input che per ottenere output dai sottoprogrammi.
- ร una variabile di lettura-scrittura all'interno dei sottoprogrammi. I loro valori possono essere modificati all'interno dei sottoprogrammi.
- Nell'istruzione chiamante, questi parametri dovrebbero sempre essere una variabile per contenere il valore dei sottoprogrammi.
Questi tipi di parametri dovrebbero essere menzionati al momento della creazione dei sottoprogrammi.
RITORNO
RETURN รจ la parola chiave che indica al compilatore di trasferire il controllo dal sottoprogramma all'istruzione chiamante. Nel sottoprogramma RETURN significa semplicemente che il controllo deve uscire dal sottoprogramma. Una volta che il controller trova la parola chiave RETURN nel sottoprogramma, il codice successivo verrร saltato.
Normalmente, il blocco genitore o principale chiamerร i sottoprogrammi, quindi il controllo passerร da quel blocco genitore ai sottoprogrammi chiamati. RETURN nel sottoprogramma restituirร il controllo al blocco genitore. Nel caso delle funzioni RETURN anche l'istruzione restituisce il valore. Il tipo di dati di questo valore viene sempre menzionato al momento della dichiarazione della funzione. Il tipo di dati puรฒ essere qualsiasi tipo di dati PL/SQL valido.
Cos'รจ la procedura in PL/SQL?
A Procedura in PL/SQL รจ un'unitร di sottoprogramma costituita da un gruppo di istruzioni PL/SQL che possono essere chiamate per nome. Ogni procedura in PL/SQL ha il proprio nome univoco con cui รจ possibile fare riferimento e richiamarla. Questa unitร di sottoprogramma nel Oracle il database viene archiviato come oggetto di database.
Nota: Il sottoprogramma non รจ altro che una procedura e deve essere creato manualmente secondo i requisiti. Una volta creati verranno archiviati come oggetti del database.
Di seguito sono riportate le caratteristiche dell'unitร del sottoprogramma Procedura in PL/SQL:
- Le procedure sono blocchi autonomi di un programma che possono essere archiviati nel file banca dati.
- La chiamata a queste procedure PLSQL puรฒ essere effettuata facendo riferimento al loro nome, per eseguire le istruzioni PL/SQL.
- Viene utilizzato principalmente per eseguire un processo in PL/SQL.
- Puรฒ avere blocchi annidati oppure puรฒ essere definito e annidato all'interno di altri blocchi o pacchetti.
- Contiene la parte di dichiarazione (facoltativa), la parte di esecuzione, la parte di gestione delle eccezioni (facoltativa).
- I valori possono essere passati Oracle procedura o recuperato dalla procedura tramite parametri.
- Questi parametri dovrebbero essere inclusi nell'istruzione di chiamata.
- Una procedura in SQL puรฒ avere un'istruzione RETURN per restituire il controllo al blocco chiamante, ma non puรฒ restituire alcun valore tramite l'istruzione RETURN.
- Le procedure non possono essere chiamate direttamente dalle istruzioni SELECT. Possono essere richiamati da un altro blocco o tramite la parola chiave EXEC.
Sintassi
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameterl IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE PROCEDURE ordina al compilatore di creare una nuova procedura in Oracle. La parola chiave 'OR REPLACE' indica alla compilazione di sostituire la procedura esistente (se presente) con quella corrente.
- Il nome della procedura deve essere univoco.
- Verrร utilizzata la parola chiave "IS" quando la procedura memorizzata sarร inserita Oracle รจ nidificato in alcuni altri blocchi. Se la procedura รจ autonoma, verrร utilizzato "AS". A parte questo standard di codifica, entrambi hanno lo stesso significato.
Esempio 1: creazione di una procedura e chiamata tramite EXEC
In questo esempio, creeremo un file Oracle procedura che prende il nome come input e stampa il messaggio di benvenuto come output. Utilizzeremo il comando EXEC per chiamare la procedura.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line (โWelcome '|| p_name); END; / EXEC welcome_msg (โGuru99โ);
Code Spiegazione:
- Code Linea 1: Creazione della procedura con nome 'welcome_msg' e con un parametro 'p_name' di tipo 'IN'.
- Code Linea 4: stampa del messaggio di benvenuto concatenando il nome immesso.
- La procedura รจ stata compilata correttamente.
- Code Linea 7: Chiamata della procedura tramite il comando EXEC con il parametro 'Guru99'. La procedura viene eseguita e il messaggio viene stampato come "Benvenuto Guru99 ".
Che cos'รจ la funzione?
Funzioni รจ un sottoprogramma PL/SQL autonomo. Come la procedura PL/SQL, le funzioni hanno un nome univoco con cui possono essere riferite. Questi vengono archiviati come oggetti di database PL/SQL. Di seguito sono riportate alcune caratteristiche delle funzioni.
- Le funzioni sono un blocco autonomo utilizzato principalmente a scopo di calcolo.
- La funzione utilizza la parola chiave RETURN per restituire il valore e il tipo di dati di questo รจ definito al momento della creazione.
- Una funzione dovrebbe restituire un valore o sollevare un'eccezione, ovvero il ritorno รจ obbligatorio nelle funzioni.
- La funzione senza istruzioni DML puรฒ essere chiamata direttamente nella query SELECT mentre la funzione con operazione DML puรฒ essere chiamata solo da altri blocchi PL/SQL.
- Puรฒ avere blocchi annidati oppure puรฒ essere definito e annidato all'interno di altri blocchi o pacchetti.
- Contiene la parte di dichiarazione (facoltativa), la parte di esecuzione, la parte di gestione delle eccezioni (facoltativa).
- I valori possono essere passati alla funzione o recuperati dalla procedura tramite i parametri.
- Questi parametri dovrebbero essere inclusi nell'istruzione di chiamata.
- Una funzione PLSQL puรฒ anche restituire il valore tramite parametri OUT diversi dall'utilizzo di RETURN.
- Poichรฉ restituirร sempre il valore, nell'istruzione di chiamata accompagna sempre l'operatore di assegnazione per popolare le variabili.
Sintassi
CREATE OR REPLACE FUNCTION <procedure_name> ( <parameterl IN/OUT <datatype> ) RETURN <datatype> [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- CREATE FUNCTION ordina al compilatore di creare una nuova funzione. La parola chiave "OR REPLACE" indica al compilatore di sostituire la funzione esistente (se presente) con quella corrente.
- Il nome della funzione deve essere univoco.
- Il tipo di dati RETURN dovrebbe essere menzionato.
- Verrร utilizzata la parola chiave "IS" quando la procedura รจ annidata in altri blocchi. Se la procedura รจ autonoma, verrร utilizzato "AS". A parte questo standard di codifica, entrambi hanno lo stesso significato.
Esempio 1: creazione di una funzione e chiamata tramite blocco anonimo
In questo programma creeremo una funzione che prende il nome come input e restituisce il messaggio di benvenuto come output. Utilizzeremo il blocco anonimo e l'istruzione select per chiamare la funzione.
CREATE OR REPLACE FUNCTION welcome_msgJune ( p_name IN VARCHAR2) RETURN VAR.CHAR2 IS BEGIN RETURN (โWelcome โ|| p_name); END; / DECLARE lv_msg VARCHAR2(250); BEGIN lv_msg := welcome_msg_func (โGuru99โ); dbms_output.put_line(lv_msg); END; SELECT welcome_msg_func(โGuru99:) FROM DUAL;
Code Spiegazione:
- Code Linea 1: Creazione del Oracle funzione con nome 'welcome_msg_func' e con un parametro 'p_name' di tipo 'IN'.
- Code Linea 2: dichiarando il tipo restituito come VARCHAR2
- Code Linea 5: Restituisce il valore concatenato 'Benvenuto' e il valore del parametro.
- Code Linea 8: Blocco anonimo per chiamare la funzione precedente.
- Code Linea 9: Dichiarare la variabile con tipo di dati uguale al tipo di dati restituito dalla funzione.
- Code Linea 11: Chiamare la funzione e popolare il valore restituito nella variabile 'lv_msg'.
- Code Linea 12: Stampa del valore della variabile. L'output che otterrai qui รจ "Benvenuto Guru99 "
- Code Linea 14: Chiamare la stessa funzione tramite l'istruzione SELECT. Il valore restituito viene indirizzato direttamente allo standard output.
Somiglianze tra procedura e funzione
- Entrambi possono essere richiamati da altri blocchi PL/SQL.
- Se l'eccezione sollevata nel sottoprogramma non viene gestita nel sottoprogramma la gestione delle eccezioni sezione, quindi si propagherร al blocco chiamante.
- Entrambi possono avere tutti i parametri richiesti.
- Entrambi sono trattati come oggetti di database in PL/SQL.
Procedura vs. Funzione: differenze chiave
| Procedura | Funzione |
|---|---|
| Utilizzato principalmente per eseguire determinati processi | Utilizzato principalmente per eseguire alcuni calcoli |
| Impossibile chiamare nell'istruzione SELECT | Una funzione che non contiene istruzioni DML puรฒ essere chiamata nell'istruzione SELECT |
| Utilizzare il parametro OUT per restituire il valore | Utilizzare RETURN per restituire il valore |
| Non รจ obbligatorio restituire il valore | ร obbligatorio restituire il valore |
| RETURN uscirร semplicemente dal controllo dal sottoprogramma. | RETURN uscirร dal controllo dal sottoprogramma e restituirร anche il valore |
| Il tipo di dati restituito non verrร specificato al momento della creazione | Il tipo di dati restituito รจ obbligatorio al momento della creazione |
Funzioni integrate in PL/SQL
PL / SQL contiene varie funzioni integrate per lavorare con stringhe e tipo di dati di data. Qui vedremo le funzioni comunemente utilizzate e il loro utilizzo.
Funzioni di conversione
Queste funzioni integrate vengono utilizzate per convertire un tipo di dati in un altro tipo di dati.
| Nome della funzione | Impiego | Esempio |
|---|---|---|
| TO_CHAR | Converte l'altro tipo di dati in tipo di dati carattere | TO_CHAR(123); |
| TO_DATE (stringa, formato) | Converte la stringa data fino ad oggi. La stringa dovrebbe corrispondere al formato. |
TO_DATE('2015-GEN-15', 'AAAA-LUN-GG'); Uscita: 1 / 15 / 2015 |
| TO_NUMBER (testo, formato) |
Converte il testo nel tipo numerico del formato specificato. L'informazione '9' indica il numero di cifre |
Seleziona TO_NUMBER('1234โฒ,'9999') da doppio;
Uscita: 1234 Seleziona TO_NUMBER('1,234.45โฒ,'9,999.99') da doppio; Uscita: 1234 |
Funzioni di stringa
Queste sono le funzioni utilizzate sul tipo di dati carattere.
| Nome della funzione | Impiego | Esempio |
|---|---|---|
| INSTR(testo, stringa, inizio, occorrenza) | Fornisce la posizione di un testo particolare nella stringa data.
|
Selezionare INSTR('AEROPLANE','E',2,1) da dual
Uscita: 2 Selezionare INSTR('AEROPLANE','E',2,2) da dual Uscita: 9 (2nd verificarsi di E) |
| SUBSTR (testo, inizio, lunghezza) | Fornisce il valore della sottostringa della stringa principale.
|
select substr('aereo',1,7) from dual
Uscita: aeropla |
| SUPERIORE (testo) | Restituisce la lettera maiuscola del testo fornito | Seleziona upper('guru99') da dual;
Uscita:GURU99 |
| INFERIORE (testo) | Restituisce la minuscola del testo fornito | Selezionare inferiore ("AerOpLane") da doppio;
Uscita: aereo |
| INITCAP (testo) | Restituisce il testo specificato con la lettera iniziale maiuscola. | Seleziona ("guru99") da doppio
Uscita: Guru99 Seleziona ('la mia storia') da doppio Uscita: La mia storia |
| LUNGHEZZA (testo) | Restituisce la lunghezza della stringa data | Seleziona LUNGHEZZA ('guru99') da doppio;
Uscita: 6 |
| LPAD (testo, lunghezza, pad_char) | Riempie la stringa nella parte sinistra per la lunghezza data (stringa totale) con il carattere dato | Seleziona LPAD('guru99', 10, '$') da dual;
Uscita: $$$$guru99 |
| RPAD (testo, lunghezza, pad_char) | Riempie la stringa nella parte destra per la lunghezza data (stringa totale) con il carattere dato | Seleziona RPAD('guru99โฒ,10,'-') da duale
Uscita:guru99โ- |
| LTRIM (testo) | Taglia lo spazio bianco iniziale dal testo | Seleziona LTRIM(' Guru99') da duale;
Uscita: Guru99 |
| RTRIM (testo) | Taglia lo spazio bianco finale dal testo | Seleziona RTRIM('Guru99 ') da duale;
Uscita; Guru99 |
Funzioni data
Queste sono funzioni utilizzate per manipolare le date.
| Nome della funzione | Impiego | Esempio |
|---|---|---|
| ADD_MONTHS (data, n. di mesi) | Aggiunge i mesi indicati alla data | ADD_MONTH('2015-01-01',5);
Uscita: 05 / 01 / 2015 |
| SYSDATA | Restituisce la data e l'ora correnti del server | Seleziona SYSDATE da doppio;
Uscita: 10/4/2015 2:11:43 |
| TRUNC | Arrotonda la variabile della data al valore piรน basso possibile | seleziona sysdate, TRUNC(sysdate) da dual;
Uscita: 10/4/2015 2:12:39 10/4/2015 |
| ROTONDO | Arrotonda la data al limite piรน vicino, superiore o inferiore | Seleziona sysdate, ROUND(sysdate) da dual
Uscita: 10/4/2015 2:14:34 10/5/2015 |
| MESI_TRA | Restituisce il numero di mesi tra due date | Selezionare MONTHS_BETWEEN (sysdate+60, sysdate) da dual
Uscita: 2 |
Sintesi
In questo capitolo abbiamo imparato quanto segue.
- Come creare una procedura e diversi modi per chiamarla
- Come creare una funzione e diversi modi per chiamarla
- Somiglianze e differenze tra Procedura e Funzione
- Parametri e RETURN terminologie comuni nei sottoprogrammi PL/SQL
- Funzioni integrate comuni in Oracle PL / SQL


