name
numele (opțional schema-calificat) a procedurii pentru a crea.
argmode
mod de un argument: IN
, INOUT
sau VARIADIC
. Dacă este omisă, valoarea implicită este IN
. (OUT
argumentele nu sunt acceptate în prezent pentru proceduri. Utilizați INOUT
în schimb.)
argname
numele unui argument.,
argtype
tipul(tipurile) de date ale argumentelor procedurii (opțional calificate prin schemă), dacă există. Tipurile de argument pot fi tipuri de bază, compozit sau domeniu sau pot face referire la tipul unei coloane de tabel.
în funcție de limbajul de implementare ar putea fi, de asemenea, permis să specificați „pseudo-tipuri”, cum ar ficstring
. Pseudo-tipurile indică faptul că tipul de argument real este fie specificat incomplet, fie în afara setului de tipuri de date SQL obișnuite.
tipul unei coloane se face referire prin scrierea
. Utilizarea acestei funcții poate ajuta uneori să facă o procedură independentă de modificările definiției unui tabel.table_name
.,column_name
%TYPE
default_expr
o expresie care va fi utilizată ca valoare implicită dacă parametrul nu este specificat. Expresia trebuie să fie coercibilă pentru tipul de argument al parametrului. Toți parametrii de intrare care urmează unui parametru cu o valoare implicită trebuie să aibă și valori implicite.
lang_name
numele limbii în care este implementată procedura., Acesta poate fi sql
, c
, internal
sau numele de utilizator definite de limbaj procedural, de exemplu, plpgsql
. Închiderea numelui în ghilimele unice este depreciată și necesită caz de potrivire.
TRANSFORM { FOR TYPE
type_name
}}
ar trebui să se aplice listele care transformă un apel la procedură. Transformă conversia între tipurile SQL și tipurile de date specifice limbajului; consultați Creare transformare. Implementările limbajului Procedural au, de obicei, cunoștințe hardcodate despre tipurile încorporate, astfel încât acestea nu trebuie să fie listate aici., Dacă o implementare a limbajului procedural nu știe cum să gestioneze un tip și nu este furnizată nicio transformare, aceasta va reveni la un comportament implicit pentru Conversia tipurilor de date, dar acest lucru depinde de implementare.
SECURITY INVOKER
SECURITY DEFINER
SECURITY INVOKER
indică faptul că procedura este de a fi executat cu privilegiile utilizatorului care solicită aceasta. Aceasta este implicit. SECURITY DEFINER
specifică faptul că procedura trebuie executată cu privilegiile utilizatorului care o deține.,
cuvântul cheie EXTERNAL
este permis pentru conformitatea SQL, dar este opțional, deoarece, spre deosebire de SQL, această caracteristică se aplică tuturor procedurilor nu numai celor externe.
SECURITY DEFINER
procedură nu poate executa tranzacția de control al declarațiilor (de exemplu, COMMIT
și ROLLBACK
, în funcție de limbă).,
configuration_parameter
value
SET
clauza cauze specificat parametru de configurare pentru a fi setat la valoarea specificată, atunci când procedura este înscris, și apoi restaurat sale anterioare, atunci când procedura de ieșiri. SET FROM CURRENT
salvează valoarea parametrului, care este actual atunci când CREATE PROCEDURE
este executat ca valoarea să fie aplicate atunci când procedura este înscris.,
Dacă un SET
clauză este atașată la o procedură, atunci efectele unui SET LOCAL
comanda executat în interiorul procedură pentru aceeași variabilă sunt limitate la procedura: parametrul de configurare prealabilă a valorii este încă restabilită la procedura de ieșire., Cu toate acestea, un obișnuit SET
comandă (fără LOCAL
) suprascrie SET
clauza de mult ca s-ar face pentru un anterioară SET LOCAL
command: efectele unei astfel de comandă va persista și după procedura de ieșire, cu excepția cazului în tranzacția curentă este derulată înapoi.
Dacă un SET
clauză este atașată la o procedură, atunci această procedură nu poate executa tranzacția de control al declarațiilor (de exemplu, COMMIT
și ROLLBACK
, în funcție de limbă).,
consultați SET și Capitolul 19 pentru mai multe informații despre numele și valorile parametrilor permise.
definition
o constantă șir care definește procedura; sensul depinde de limbă. Poate fi un nume de procedură internă, calea către un fișier obiect, o comandă SQL sau un text într-un limbaj procedural.
este adesea util să folosiți cotația dollar (vezi secțiunea 4.1.2.4) pentru a scrie șirul de definiție a procedurii, mai degrabă decât sintaxa normală a citării unice. Fără a cita Dolar, orice citate unice sau backslash-uri în definiția procedurii trebuie să fie scăpat prin dublarea lor.,
obj_file
, link_symbol
Această formă de AS
clauză este folosit pentru dinamică de încărcare C limba proceduri atunci când procedura de nume în limbajul C codul sursă nu este la fel ca numele de procedura SQL. Șirul obj_file
este numele fișierului bibliotecii partajate care conține procedura c compilată și este interpretat ca pentru comanda de încărcare. Șirul link_symbol
este simbolul de legătură al procedurii, adică numele procedurii în codul sursă al limbii C., Dacă simbolul de legătură este omis, se presupune că este același cu numele procedurii SQL definite.
când se repetăCREATE PROCEDURE
apelurile se referă la același fișier obiect, fișierul este încărcat o singură dată pe sesiune. Pentru a descărca și reîncărca fișierul (poate în timpul dezvoltării), începeți o nouă sesiune.