PL / SQL - Procedure
In questo capitolo, discuteremo le procedure in PL / SQL. UNsubprogramè un'unità / modulo di programma che esegue un compito particolare. Questi sottoprogrammi vengono combinati per formare programmi più grandi. Questo è fondamentalmente chiamato "design modulare". Un sottoprogramma può essere richiamato da un altro sottoprogramma o programma chiamatocalling program.
È possibile creare un sottoprogramma -
- A livello di schema
- All'interno di un pacchetto
- All'interno di un blocco PL / SQL
A livello di schema, il sottoprogramma è un file standalone subprogram. Viene creato con l'istruzione CREATE PROCEDURE o CREATE FUNCTION. Viene memorizzato nel database e può essere eliminato con l'istruzione DROP PROCEDURE o DROP FUNCTION.
Un sottoprogramma creato all'interno di un pacchetto è un file packaged subprogram. Viene archiviato nel database e può essere eliminato solo quando il pacchetto viene eliminato con l'istruzione DROP PACKAGE. Discuteremo i pacchetti nel capitolo'PL/SQL - Packages'.
I sottoprogrammi PL / SQL sono denominati blocchi PL / SQL che possono essere richiamati con una serie di parametri. PL / SQL fornisce due tipi di sottoprogrammi:
Functions- Questi sottoprogrammi restituiscono un unico valore; utilizzato principalmente per calcolare e restituire un valore.
Procedures- Questi sottoprogrammi non restituiscono direttamente un valore; utilizzato principalmente per eseguire un'azione.
Questo capitolo tratterà aspetti importanti di a PL/SQL procedure. Noi discuteremoPL/SQL function nel prossimo capitolo.
Parti di un sottoprogramma PL / SQL
Ogni sottoprogramma PL / SQL ha un nome e può anche avere un elenco di parametri. Come i blocchi PL / SQL anonimi, i blocchi denominati avranno anche le seguenti tre parti:
S.No | Parti e descrizione |
---|---|
1 | Declarative Part È una parte facoltativa. Tuttavia, la parte dichiarativa per un sottoprogramma non inizia con la parola chiave DECLARE. Contiene dichiarazioni di tipi, cursori, costanti, variabili, eccezioni e sottoprogrammi annidati. Questi elementi sono locali nel sottoprogramma e cessano di esistere quando il sottoprogramma completa l'esecuzione. |
2 | Executable Part Questa è una parte obbligatoria e contiene istruzioni che eseguono l'azione designata. |
3 | Exception-handling Anche questa è una parte facoltativa. Contiene il codice che gestisce gli errori di runtime. |
Creazione di una procedura
Viene creata una procedura con il CREATE OR REPLACE PROCEDUREdichiarazione. La sintassi semplificata per l'istruzione CREATE OR REPLACE PROCEDURE è la seguente:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END procedure_name;
Dove,
nome-procedura specifica il nome della procedura.
L'opzione [OR REPLACE] consente la modifica di una procedura esistente.
L'elenco dei parametri facoltativi contiene nome, modalità e tipi di parametri. IN rappresenta il valore che verrà passato dall'esterno e OUT rappresenta il parametro che verrà utilizzato per restituire un valore al di fuori della procedura.
procedure-body contiene la parte eseguibile.
La parola chiave AS viene utilizzata al posto della parola chiave IS per creare una procedura autonoma.
Esempio
L'esempio seguente crea una semplice procedura che visualizza la stringa "Hello World!" sullo schermo quando viene eseguito.
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
/
Quando il codice sopra viene eseguito utilizzando il prompt SQL, produrrà il seguente risultato:
Procedure created.
Esecuzione di una procedura autonoma
Una procedura autonoma può essere chiamata in due modi:
Usando il EXECUTE parola chiave
Chiamare il nome della procedura da un blocco PL / SQL
La procedura sopra denominata 'greetings' può essere chiamato con la parola chiave EXECUTE come -
EXECUTE greetings;
La chiamata sopra mostrerà:
Hello World
PL/SQL procedure successfully completed.
La procedura può essere richiamata anche da un altro blocco PL / SQL -
BEGIN
greetings;
END;
/
La chiamata sopra mostrerà:
Hello World
PL/SQL procedure successfully completed.
Eliminazione di una procedura autonoma
Una procedura autonoma viene eliminata con l'estensione DROP PROCEDUREdichiarazione. La sintassi per eliminare una procedura è:
DROP PROCEDURE procedure-name;
È possibile eliminare la procedura dei saluti utilizzando la seguente dichiarazione:
DROP PROCEDURE greetings;
Modalità dei parametri nei sottoprogrammi PL / SQL
La tabella seguente elenca le modalità dei parametri nei sottoprogrammi PL / SQL:
S.No | Modalità e descrizione dei parametri |
---|---|
1 | IN Un parametro IN consente di passare un valore al sottoprogramma. It is a read-only parameter. All'interno del sottoprogramma, un parametro IN agisce come una costante. Non può essere assegnato un valore. È possibile passare una costante, una variabile letterale, una variabile inizializzata o un'espressione come parametro IN. Puoi anche inizializzarlo a un valore predefinito; tuttavia, in quel caso, viene omesso dalla chiamata al sottoprogramma.It is the default mode of parameter passing. Parameters are passed by reference. |
2 | OUT Un parametro OUT restituisce un valore al programma chiamante. All'interno del sottoprogramma, un parametro OUT agisce come una variabile. È possibile modificarne il valore e fare riferimento al valore dopo averlo assegnato.The actual parameter must be variable and it is passed by value. |
3 | IN OUT Un IN OUTil parametro passa un valore iniziale a un sottoprogramma e restituisce un valore aggiornato al chiamante. Può essere assegnato un valore e il valore può essere letto. Il parametro effettivo corrispondente a un parametro formale IN OUT deve essere una variabile, non una costante o un'espressione. Al parametro formale deve essere assegnato un valore.Actual parameter is passed by value. |
Esempio di modalità IN & OUT 1
Questo programma trova il minimo di due valori. Qui, la procedura prende due numeri utilizzando la modalità IN e restituisce il loro minimo utilizzando i parametri OUT.
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
END;
/
Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato:
Minimum of (23, 45) : 23
PL/SQL procedure successfully completed.
Esempio di modalità IN & OUT 2
Questa procedura calcola il quadrato del valore di un valore passato. Questo esempio mostra come possiamo usare lo stesso parametro per accettare un valore e quindi restituire un altro risultato.
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a);
END;
/
Quando il codice precedente viene eseguito al prompt SQL, produce il seguente risultato:
Square of (23): 529
PL/SQL procedure successfully completed.
Metodi per il passaggio dei parametri
I parametri effettivi possono essere passati in tre modi:
- Notazione di posizione
- Notazione denominata
- Notazione mista
Notazione di posizione
Nella notazione posizionale, puoi chiamare la procedura come -
findMin(a, b, c, d);
Nella notazione posizionale, il primo parametro effettivo viene sostituito dal primo parametro formale; il secondo parametro effettivo viene sostituito al secondo parametro formale e così via. Così,a è sostituito da x, b è sostituito da y, c è sostituito da z e d è sostituito da m.
Notazione denominata
Nella notazione denominata, il parametro effettivo è associato al parametro formale utilizzando l'estensione arrow symbol ( => ). La chiamata alla procedura sarà come la seguente:
findMin(x => a, y => b, z => c, m => d);
Notazione mista
Nella notazione mista, puoi combinare entrambe le notazioni nella chiamata di procedura; tuttavia, la notazione di posizione dovrebbe precedere la notazione denominata.
La seguente chiamata è legale:
findMin(a, b, c, m => d);
Tuttavia, questo non è legale:
findMin(x => a, b, c, d);