name
nazwa (opcjonalnie kwalifikowana do schematu) procedury do utworzenia.
argmode
tryb argumentu:IN
,INOUT
lubVARIADIC
. Jeśli pominięto, domyślną wartością jest IN
. (OUT
argumenty nie są obecnie obsługiwane dla procedur. Zamiast tego użyj INOUT
.)
argname
nazwa argumentu.,
argtype
Typ(Y) danych argumentów procedury (opcjonalnie kwalifikowany jako schemat), jeśli istnieją. Typy argumentów mogą być typami bazowymi, złożonymi lub domenowymi lub mogą odwoływać się do typu kolumny tabeli.
w zależności od języka implementacji może być również dozwolone określenie „pseudo-typów”, takich jak cstring
. Pseudo-typy wskazują, że rzeczywisty typ argumentu jest albo niekompletnie określony, albo poza zestawem zwykłych typów danych SQL.
do rodzaju kolumny odwołuje się pisząc
. Korzystanie z tej funkcji może czasami pomóc w uniezależnieniu procedury od zmian w definicji tabeli.table_name
.,column_name
%TYPE
default_expr
wyrażenie, które ma być używane jako wartość domyślna, jeśli parametr nie jest określony. Wyrażenie musi być zgodne z typem argumentu parametru. Wszystkie parametry wejściowe następujące po parametrze z wartością domyślną muszą mieć również wartości domyślne.
lang_name
nazwa języka, w którym procedura jest zaimplementowana., Może to być sql
, c
, internal
lub nazwa zdefiniowanego przez użytkownika języka proceduralnego, np. plpgsql
. Umieszczenie nazwy w cudzysłowach jest przestarzałe i wymaga dopasowania wielkości liter.
TRANSFORM { FOR TYPE
type_name
}}
powinny mieć zastosowanie listy, które przekształcają wywołanie do procedury. Transformacje konwertuj między typami SQL i typami danych specyficznych dla języka; zobacz Tworzenie transformacji. Implementacje języka proceduralnego zwykle mają zakodowaną wiedzę na temat wbudowanych typów, więc nie muszą być tutaj wymienione., Jeśli implementacja języka proceduralnego nie wie, jak obsługiwać typ i nie zostanie dostarczona Żadna transformacja, powróci do domyślnego zachowania konwertowania typów danych, ale zależy to od implementacji.
SECURITY INVOKER
SECURITY DEFINER
SECURITY INVOKER
wskazuje, że procedura ma być wykonana z uprawnieniami użytkownika, który ją wywołuje. To jest domyślne. SECURITY DEFINER
określa, że procedura ma być wykonywana z uprawnieniami użytkownika, który ją posiada.,
słowo kluczowe EXTERNAL
jest dozwolone dla zgodności z SQL, ale jest opcjonalne, ponieważ, w przeciwieństwie do SQL, ta funkcja dotyczy wszystkich procedur, nie tylko zewnętrznych.
aSECURITY DEFINER
procedura nie może wykonać instrukcji kontroli transakcji (na przykładCOMMIT
I ROLLBACK
, w zależności od języka).,
configuration_parameter
value
klauzulaSET
powoduje ustawienie określonego parametru konfiguracyjnego na określoną wartość po wprowadzeniu procedury, a następnie przywrócenie jego poprzedniej wartości po zakończeniu procedury. SET FROM CURRENT
zapisuje wartość parametru, który jest aktualny, gdy CREATE PROCEDURE
jest wykonywany jako wartość, która ma być zastosowana podczas wprowadzania procedury.,
Jeśli do procedury dołączona jest klauzulaSET
, to efekty poleceniaSET LOCAL
wykonanego wewnątrz procedury dla tej samej zmiennej są ograniczone do procedury: poprzednia wartość parametru konfiguracyjnego jest nadal przywracana przy zakończeniu procedury., Jednak zwykłe polecenie SET
(bez LOCAL
) nadpisuje klauzulę SET
, podobnie jak w przypadku poprzedniego polecenia SET LOCAL
: efekty takiego polecenia będą utrzymywać się po zakończeniu procedury, chyba że aktualna transakcja jest wycofywana.
Jeśli do procedury dołączona jest klauzula SET
, procedura ta nie może wykonać instrukcji kontroli transakcji (na przykład COMMIT
I ROLLBACK
, w zależności od języka).,
Patrz SET i Rozdział 19, aby uzyskać więcej informacji o dozwolonych nazwach parametrów i wartościach.
definition
stała łańcuchowa określająca procedurę; znaczenie zależy od języka. Może to być wewnętrzna nazwa procedury, ścieżka do pliku obiektowego, polecenie SQL lub tekst w języku proceduralnym.
często pomocne jest użycie cudzysłowu dolarowego (patrz sekcja 4.1.2.4) do napisania ciągu definicji procedury, a nie zwykłej składni pojedynczego cudzysłowu. Bez cytowania dolara, wszelkie pojedyncze cudzysłowy lub ukośniki w definicji procedury muszą być unikane przez podwojenie ich.,
obj_file
,link_symbol
ta forma klauzuliAS
jest używana do dynamicznie ładowanych procedur języka C, gdy nazwa procedury w kodzie źródłowym języka C nie jest taka sama jak nazwa procedury SQL. Łańcuch obj_file
jest nazwą pliku biblioteki współdzielonej zawierającego skompilowaną procedurę C i jest interpretowany tak, jak dla polecenia LOAD. Ciąg znaków link_symbol
jest symbolem łącza procedury, czyli nazwą procedury w kodzie źródłowym języka C., Jeśli symbol dowiązania zostanie pominięty, przyjmuje się, że jest taki sam jak nazwa zdefiniowanej procedury SQL.
gdy powtarzane CREATE PROCEDURE
wywołania odnoszą się do tego samego pliku obiektowego, plik jest ładowany tylko raz na sesję. Aby rozładować i przeładować plik (być może podczas tworzenia), rozpocznij nową sesję.