name
namnet (valfritt schema-kvalificerat) på proceduren för att skapa.
argmode
läget för ett argument:IN
,INOUT
ellerVARIADIC
. Om det utelämnas är standardvärdet IN
. (OUT
argument stöds för närvarande inte för procedurer. Använd INOUT
istället.)
argname
namnet på ett argument.,
argtype
datatypen / datatyperna för procedurens argument(eventuellt schemakvalificerade), om sådana finns. Argumenttyperna kan vara bas -, komposit-eller domäntyper, eller kan referera till typen av en tabellkolumn.
beroende på implementeringsspråket kan det också vara tillåtet att ange ”pseudotyper” som . Pseudotyper indikerar att den faktiska argumenttypen är antingen ofullständigt angiven eller utanför uppsättningen vanliga SQL-datatyper.
typen av kolumn refereras genom att skriva
. Att använda den här funktionen kan ibland bidra till att göra ett förfarande oberoende av ändringar i definitionen av en tabell.table_name
.,column_name
%TYP
default_expr
ett uttryck som ska användas som standardvärde om parametern inte anges. Uttrycket måste vara tvingande till parameterns argumenttyp. Alla indataparametrar som följer en parameter med ett standardvärde måste också ha standardvärden.
lang_name
namnet på det språk som proceduren implementeras i., Det kan vara sql
, c
, internal
eller namnet på ett användardefinierat procedurspråk, t.ex. plpgsql
. Att innesluta namnet i enstaka citat är föråldrat och kräver matchande kundcase.
TRANSFORM { FOR TYPE
type_name
}}
listor som omvandlar ett samtal till förfarandet bör gälla. Omvandlar konvertera mellan SQL-typer och Språkspecifika datatyper; se Skapa TRANSFORM. Procedurspråkimplementeringar har vanligtvis hårdkodad kunskap om de inbyggda typerna, så de behöver inte listas här., Om en procedurspråkimplementering inte vet hur man hanterar en typ och ingen omvandling levereras, kommer den att falla tillbaka till ett standardbeteende för att konvertera datatyper, men det beror på implementeringen.
SECURITY INVOKER
SECURITY DEFINER
SECURITY INVOKER
indikerar att proceduren ska utföras med behörigheten för användaren som kallar den. Det är standard. SECURITY DEFINER
anger att proceduren ska utföras med behörigheterna för användaren som äger den.,
nyckelordetEXTERNAL
är tillåtet för SQL-överensstämmelse, men det är valfritt eftersom den här funktionen, till skillnad från i SQL, gäller alla procedurer inte bara externa.
aSECURITY DEFINER
– proceduren kan inte utföra transaktionskontrollutdrag (till exempelCOMMIT
ochROLLBACK
, beroende på språk).,
configuration_parameter
value
klausulenSET
gör att den angivna konfigurationsparametern ställs in på det angivna värdet när proceduren skrivs in och sedan återställs till dess tidigare värde när proceduren avslutas. SET FROM CURRENT
sparar värdet för den parameter som är aktuell närCREATE PROCEDURE
körs som det värde som ska tillämpas när proceduren anges.,
om enSET
– klausul är kopplad till en procedur, begränsas effekterna av ettSET LOCAL
– kommando som körs inuti proceduren för samma variabel till proceduren: konfigurationsparameterns tidigare värde återställs fortfarande vid procedurutgången., Ett vanligt SET
– kommando (utan LOCAL
) åsidosätter SET
– klausulen, mycket som den skulle göra för ett tidigare SET LOCAL
– kommando: effekterna av ett sådant kommando kommer att kvarstå efter procedurutgången, såvida inte den aktuella transaktionen rullas tillbaka.
om enSET
– klausul är kopplad till en procedur kan den proceduren inte utföra transaktionskontrollutdrag (till exempelCOMMIT
ochROLLBACK
, beroende på språk).,
se SET och kapitel 19 för mer information om tillåtna parameternamn och värden.
definition
en strängkonstant som definierar proceduren; betydelsen beror på språket. Det kan vara ett internt procedurnamn, sökvägen till en objektfil, ett SQL-kommando eller text på ett procedurspråk.
det är ofta bra att använda dollarcitering (se avsnitt 4.1.2.4) för att skriva procedurdefinitionssträngen, snarare än den normala singelciteringssyntaxen. Utan att citera dollar måste alla enskilda citat eller backslashes i procedurdefinitionen undkomma genom att fördubbla dem.,
obj_file
,link_symbol
denna form avAS
används för dynamiskt belastningsbara C-språkprocedurer när procedurnamnet i C-språkkällkoden inte är samma som namnet på SQL-proceduren. Strängen obj_file
är namnet på den delade biblioteksfilen som innehåller den kompilerade C-proceduren och tolkas som för LASTKOMMANDOT. Strängen link_symbol
är procedurens länksymbol, det vill säga namnet på proceduren i källkoden för C-språk., Om länksymbolen utelämnas antas den vara densamma som namnet på SQL-proceduren som definieras.
NärCREATE PROCEDURE
samtal refererar till samma objektfil laddas filen bara en gång per session. För att lossa och ladda om filen (kanske under utveckling), starta en ny session.