name
de naam (optioneel schema-gekwalificeerd) van de te maken procedure.
argmode
De modus van een argument: IN
, INOUT
, of VARIADIC
. Indien weggelaten, is de standaard IN
. (OUT
argumenten worden momenteel niet ondersteund voor procedures. Gebruik INOUT
in plaats daarvan.)
argname
de naam van een argument.,
argtype
het(de) gegevenstype (en) van de argumenten van de procedure (optioneel schema-gekwalificeerd), indien van toepassing. De argumenttypen kunnen base -, composite-of domeintypen zijn of verwijzen naar het type van een tabelkolom.
afhankelijk van de implementatietaal kan het ook toegestaan zijn om “pseudo-types” te specificeren, zoals cstring
. Pseudo-types geven aan dat het werkelijke argumenttype ofwel onvolledig is opgegeven, ofwel buiten de set van gewone SQL-gegevenstypen.
naar het type kolom wordt verwezen door
. Het gebruik van deze functie kan soms helpen om een procedure onafhankelijk te maken van wijzigingen in de definitie van een tabel.table_name
te schrijven.,column_name
% TYPE
default_expr
een uitdrukking die als standaardwaarde moet worden gebruikt als de parameter niet is gespecificeerd. De uitdrukking moet dwingend zijn voor het argumenttype van de parameter. Alle invoerparameters die een parameter met een standaardwaarde volgen, moeten ook standaardwaarden hebben.
lang_name
de naam van de taal waarin de procedure wordt geïmplementeerd., Het kan sql
, c
, internal
, of de naam van een door de gebruiker gedefinieerde procedurele taal, bijvoorbeeld plpgsql
. Het omsluiten van de naam in enkele aanhalingstekens is verouderd en vereist matching case.
TRANSFORM { FOR TYPE
type_name
}}
lijsten die een oproep omzetten in de procedure moeten van toepassing zijn. Transformaties converteren tussen SQL-typen en taalspecifieke gegevenstypen; zie transformeren maken. Procedurele taalimplementaties hebben meestal hardcoded kennis van de ingebouwde typen, dus die hoeven hier niet te worden vermeld., Als een procedurele taalimplementatie niet weet hoe een type moet worden behandeld en er geen transformatie wordt gegeven, zal het terugvallen op een standaardgedrag voor het converteren van gegevenstypen, maar dit hangt af van de implementatie.
SECURITY INVOKER
SECURITY DEFINER
SECURITY INVOKER
geeft aan dat de procedure moet worden uitgevoerd met de rechten van de gebruiker die het aanroept. Dat is de standaard. SECURITY DEFINER
geeft aan dat de procedure moet worden uitgevoerd met de privileges van de gebruiker die het bezit.,
het sleutelwoord EXTERNAL
is toegestaan voor SQL-conformiteit, maar is optioneel omdat deze functie, in tegenstelling tot in SQL, niet alleen van toepassing is op externe procedures.
a SECURITY DEFINER
procedure kan geen transactiecontroleverklaringen uitvoeren (bijvoorbeeld COMMIT
en ROLLBACK
, afhankelijk van de taal).,
configuration_parameter
value
de SET
clausule zorgt ervoor dat de opgegeven configuratieparameter wordt ingesteld op de opgegeven waarde wanneer de procedure wordt ingevoerd, en vervolgens wordt hersteld naar de vorige waarde wanneer de procedure wordt afgesloten. SET FROM CURRENT
slaat de waarde op van de parameter die actueel is wanneer CREATE PROCEDURE
wordt uitgevoerd als de waarde die moet worden toegepast wanneer de procedure wordt ingevoerd.,
als eenSET
clausule is toegevoegd aan een procedure, dan zijn de effecten van eenSET LOCAL
commando uitgevoerd binnen de procedure voor dezelfde variabele beperkt tot de procedure: de waarde van de configuratie parameter is nog steeds hersteld bij het afsluiten van de procedure., Echter, een gewone SET
commando (zonder LOCAL
) overschrijft de SET
clausule, net zoals het zou doen voor een vorige SET LOCAL
commando: de effecten van een dergelijk Commando zullen blijven bestaan na het afsluiten van de procedure, tenzij de huidige transactie wordt teruggedraaid.
als eenSET
clausule is toegevoegd aan een procedure, dan kan die procedure geen transactiecontroleverklaringen uitvoeren (bijvoorbeeldCOMMIT
enROLLBACK
, afhankelijk van de taal).,
zie SET en hoofdstuk 19 voor meer informatie over toegestane parameternamen en waarden.
definition
een stringconstante die de procedure definieert; de Betekenis hangt af van de taal. Het kan een interne procedure naam, het pad naar een object bestand, een SQL commando, of tekst in een procedurele taal.
Het is vaak nuttig om dollarcitaten te gebruiken (zie paragraaf 4.1.2.4) om de procedure definitie string te schrijven, in plaats van de normale single quote syntaxis. Zonder dollarcitaten moeten afzonderlijke citaten of backslashes in de proceduredefinitie worden vermeden door ze te verdubbelen.,
obj_file
, link_symbol
deze vorm van de AS
clausule wordt gebruikt voor dynamisch laadbare C-taalprocedures wanneer de naam van de procedure in de C-taalbroncode niet dezelfde is als de naam van de SQL-procedure. De string obj_file
is de naam van het gedeelde bibliotheekbestand dat de gecompileerde C-procedure bevat, en wordt geïnterpreteerd als voor het LOAD-Commando. De tekenreeks link_symbol
is het verbindingssymbool van de procedure, dat wil zeggen de naam van de procedure in de broncode van de taal C., Als het koppelingssymbool wordt weggelaten, wordt ervan uitgegaan dat het hetzelfde is als de naam van de SQL-procedure die wordt gedefinieerd.
bij herhaalde CREATE PROCEDURE
aanroepen verwijzen naar hetzelfde objectbestand, wordt het bestand slechts één keer per sessie geladen. Om het bestand te lossen en te herladen (misschien tijdens de ontwikkeling), start je een nieuwe sessie.