name
Il nome (facoltativamente qualificato dallo schema) della procedura da creare.
argmode
La modalità di un argomento:IN
,INOUT
, oVARIADIC
. Se omesso, il valore predefinito è IN
. (OUT
gli argomenti non sono attualmente supportati per le procedure. Utilizzare invece INOUT
.)
argname
Il nome di un argomento.,
argtype
Il tipo di dati degli argomenti della procedura(facoltativamente qualificati dallo schema), se presenti. I tipi di argomenti possono essere di tipo base, composito o di dominio oppure possono fare riferimento al tipo di colonna di una tabella.
A seconda del linguaggio di implementazione potrebbe anche essere consentito specificare “pseudo-tipi” come cstring
. Gli pseudo-tipi indicano che il tipo di argomento effettivo è specificato in modo incompleto o al di fuori del set di tipi di dati SQL ordinari.
Al tipo di colonna si fa riferimento scrivendo
. L’utilizzo di questa funzione può talvolta aiutare a rendere una procedura indipendente dalle modifiche alla definizione di una tabella.table_name
.,column_name
%TYPE
default_expr
Un’espressione da utilizzare come valore predefinito se il parametro non è specificato. L’espressione deve essere coercibile al tipo di argomento del parametro. Tutti i parametri di input che seguono un parametro con un valore predefinito devono avere anche valori predefiniti.
lang_name
Il nome della lingua in cui è implementata la procedura., Può esseresql
,c
,internal
, o il nome di un linguaggio procedurale definito dall’utente, ad esempioplpgsql
. Racchiudere il nome tra virgolette singole è deprecato e richiede il caso corrispondente.
TRANSFORM { FOR TYPE
type_name
}}
Elenchi che trasformano una chiamata alla procedura dovrebbe applicarsi. Trasforma convertire tra tipi SQL e tipi di dati specifici della lingua; vedere CREA TRASFORMAZIONE. Le implementazioni del linguaggio procedurale di solito hanno una conoscenza hardcoded dei tipi incorporati, quindi non è necessario elencarli qui., Se un’implementazione del linguaggio procedurale non sa come gestire un tipo e non viene fornita alcuna trasformazione, tornerà a un comportamento predefinito per la conversione dei tipi di dati, ma ciò dipende dall’implementazione.
SECURITY INVOKER
SECURITY DEFINER
SECURITY INVOKER
indica che la procedura deve essere eseguita con i privilegi dell’utente che la chiama. Questo è il valore predefinito. SECURITY DEFINER
specifica che la procedura deve essere eseguita con i privilegi dell’utente che la possiede.,
La parola chiave EXTERNAL
è consentita per la conformità SQL, ma è facoltativa poiché, a differenza di SQL, questa funzione si applica a tutte le procedure non solo a quelle esterne.
ASECURITY DEFINER
La procedura non può eseguire istruzioni di controllo delle transazioni (ad esempio,COMMIT
e ROLLBACK
, a seconda della lingua).,
configuration_parameter
value
La clausolaSET
fa sì che il parametro di configurazione specificato venga impostato sul valore specificato quando viene immessa la procedura e quindi ripristinato al valore precedente quando la procedura termina. SET FROM CURRENT
salva il valore del parametro corrente quandoCREATE PROCEDURE
viene eseguito come valore da applicare quando viene immessa la procedura.,
Se una clausolaSET
è collegata a una procedura, gli effetti di un comandoSET LOCAL
eseguito all’interno della procedura per la stessa variabile sono limitati alla procedura: il valore precedente del parametro di configurazione viene ancora ripristinato all’uscita della procedura., Tuttavia, un normale comando SET
(senza LOCAL
) sovrascrive la clausola SET
, proprio come farebbe per un precedente comando SET LOCAL
: gli effetti di tale comando persisteranno dopo l’uscita della procedura, a meno che la transazione corrente viene ripristinata.
Se una clausola SET
è collegata a una procedura, tale procedura non può eseguire istruzioni di controllo delle transazioni (ad esempio, COMMIT
e ROLLBACK
, a seconda della lingua).,
Vedere SET e Capitolo 19 per ulteriori informazioni sui nomi e sui valori dei parametri consentiti.
definition
Una costante di stringa che definisce la procedura; il significato dipende dalla lingua. Può essere un nome di procedura interno, il percorso di un file oggetto, un comando SQL o un testo in un linguaggio procedurale.
È spesso utile usare la citazione in dollari (vedere Sezione 4.1.2.4) per scrivere la stringa di definizione della procedura, piuttosto che la normale sintassi delle virgolette singole. Senza quotare in dollari, eventuali virgolette singole o barre rovesciate nella definizione della procedura devono essere sfuggite raddoppiandole.,
obj_file
,link_symbol
Questa forma della clausolaAS
viene utilizzata per procedure in linguaggio C caricabili dinamicamente quando il nome della procedura nel codice sorgente del linguaggio C non è lo stesso del nome della procedura SQL. La stringa obj_file
è il nome del file di libreria condivisa contenente la procedura C compilata e viene interpretata come per il comando LOAD. La stringa link_symbol
è il simbolo di collegamento della procedura, ovvero il nome della procedura nel codice sorgente del linguaggio C., Se il simbolo del collegamento viene omesso, si presume che sia lo stesso del nome della procedura SQL definita.
Quando ripetuteCREATE PROCEDURE
chiamate si riferiscono allo stesso file oggetto, il file viene caricato solo una volta per sessione. Per scaricare e ricaricare il file (forse durante lo sviluppo), avviare una nuova sessione.