DECLARE FUNCTION
Déclaration et mise en œuvre d’une sous-fonction.
PSQL
<subfunc-declaration> ::= DECLARE FUNCTION subfuncname [(<input-parameters>)] RETURNS <type> [COLLATE collation] [DETERMINISTIC]; <subfunc-implimentation> ::= DECLARE FUNCTION subfuncname [(<input-parameters>)] RETURNS <type> [COLLATE collation] [DETERMINISTIC] <psql-routine-body> <input-parameters> ::= <inparam> [, <inparam> ...] <output-parameters> ::= <outparam> [, <outparam> ...] <psql-routine-body> ::= Voir. Syntaxe du corps du module
Paramètre | Description |
---|---|
subfuncname |
Le nom de la sous-fonction. |
inparam |
Description du paramètre d’entrée. |
type |
Type de résultat de sortie. |
collation |
Ordre de tri. |
L’Instruction DECLARE FUNCTION
déclare une sous-fonction.
Les restrictions suivantes sont imposées au sous-programme :
-
Un sous-programme ne peut pas être imbriqué dans un autre sous-programme. Ils ne sont pris en charge que dans le module principal (procédure stockée, fonction stockée, déclencheur et bloc PSQL anonyme) ;
-
Les variables du module principal sont disponibles dans un sous-programme ;
-
Les variables et paramètres accédés par les sous-programmes peuvent avoir une légère dégradation des performances lors de leur lecture (même dans le programme principal).
-
Actuellement, les sous-programmes n’ont pas d’accès direct aux curseurs du module principal. Cela pourrait être autorisé à l’avenir.
Un sous-programme peut appeler un autre sous-programme, y compris de manière récursive.Dans certains cas, il peut être nécessaire de déclarer au préalable un sous-programme.Règle générale : un sous-programme peut appeler un autre sous-programme si ce dernier est déclaré au-dessus du point d’appel.Tous les sous-programmes déclarés doivent être mis en œuvre avec la même signature.Les valeurs par défaut des paramètres des sous-programmes ne peuvent pas être remplacées.Cela signifie qu’ils ne peuvent être définis que dans l’implémentation de sous-programmes qui n’ont pas été déclarés auparavant.
--
-- Une sous-fonction dans une fonction stockée
--
CREATE OR ALTER FUNCTION FUNC1 (n1 INTEGER, n2 INTEGER)
RETURNS INTEGER
AS
-- Sous-fonction
DECLARE FUNCTION SUBFUNC (n1 INTEGER, n2 INTEGER)
RETURNS INTEGER
AS
BEGIN
RETURN n1 + n2;
END
BEGIN
RETURN SUBFUNC(n1, n2);
END ^
EXECUTE BLOCK RETURNS (i INTEGER, o INTEGER)
AS
-- Sous-programme-fonction récursif sans déclaration préalable.
DECLARE FUNCTION fibonacci(n INTEGER) RETURNS INTEGER
AS
BEGIN
IF (n = 0 OR n = 1) THEN
RETURN n;
ELSE
RETURN fibonacci(n - 1) + fibonacci(n - 2);
END
BEGIN
i = 0;
WHILE (i < 10)
DO
BEGIN
o = fibonacci(i);
SUSPEND;
i = i + 1;
END
END!