Paramètres de sortie
La clause optionnelle RETURNS
vous permet de spécifier une liste de paramètres de sortie pour la procédure stockée.
La clause optionnelle RETURNS
vous permet de spécifier une liste de paramètres de sortie pour la procédure stockée.
Vous pouvez spécifier un nom de domaine comme type de paramètre.Dans ce cas, le paramètre hérite de toutes les caractéristiques du domaine.
Si la clause TYPE OF
est utilisée en plus devant un nom de domaine, seul le type de données du domaine est utilisé — ses contraintes NOT NULL
et CHECK
(si elles existent) ne sont pas vérifiées et sa valeur par défaut n’est pas utilisée.Si le domaine est un type de texte, son jeu de caractères et son ordre de tri sont toujours utilisés.
Les paramètres d’entrée et de sortie peuvent être déclarés en utilisant le type de données colonne des tables et vues existantes.Pour ce faire, on utilise la phrase TYPE OF COLUMN
, suivie du nom de la table ou de la vue et du nom de la colonne séparés par un point.
Lorsque vous utilisez TYPE OF COLUMN
, seul le type de données est hérité, et dans le cas des types de chaînes de caractères, également le jeu de caractères et l’ordre de tri.Les contraintes et les valeurs par défaut de la colonne ne sont jamais utilisées.
La clause facultative SQL SECURITY
vous permet de spécifier avec quels privilèges la procédure stockée est exécutée.Si l’option INVOKER
est sélectionnée, la procédure stockée est exécutée avec les privilèges de l’appelant.Si l’option DEFINER
est sélectionnée, la procédure stockée est exécutée avec les privilèges de l’utilisateur définissant (le propriétaire du thread). Ces privilèges s’ajouteront aux privilèges accordés à la procédure stockée elle-même à l’aide de l’opérateur GRANT
.Par défaut, la procédure stockée est exécutée avec les privilèges de l’utilisateur appelant.
Tip
|
Les privilèges d’exécution par défaut pour les objets de métadonnées nouvellement créés peuvent être modifiés à l’aide de la commande ALTER DATABASE SET DEFAULT SQL SECURITY {DEFINER | INVOKER} |
Après le mot clé As
suit le corps de la procédure stockée.
La section optionnelle <déclarations>
décrit les variables locales de procédure, les sous-programmes et les curseurs nommés.En ce qui concerne la spécification du type de données, les variables locales sont soumises aux mêmes règles que les paramètres d’entrée et de sortie des procédures.Pour plus de détails, voir "Langage procédural PSQL" dansDECLARE VARIABLE etDECLARE CURSOR,DECLARE PROCEDURE,DECLARE FUNCTION.
La section de déclaration facultative est nécessairement suivie d’une déclaration composée.Une instruction composée consiste en une ou plusieurs instructions PSQL comprises entre les mots-clés BEGIN
et END
.Un opérateur composé peut contenir un ou plusieurs autres opérateurs composés.L’imbrication est limitée à 512 niveaux.N’importe lequel des BEGIN … END
peuvent être vides, y compris le bloc principal.
La procédure stockée peut être située dans un module externe.Dans ce cas, au lieu du corps de la procédure, son emplacement dans le module externe est spécifié avec la phrase EXTERNAL NAME
.L’argument de cette phrase est une chaîne de caractères contenant le nom du module externe, le nom de la procédure à l’intérieur du module et les informations définies par l’utilisateur, séparés par un séparateur.La clause ENGINE
spécifie le nom du moteur pour la gestion des connexions de modules externes.Dans Firebird, le moteur UDR est utilisé pour gérer les modules externes.Le mot-clé AS
peut être suivi d’une chaîne littérale — le "corps" d’une procédure externe, il peut être utilisé par un module externe à des fins diverses.
L’instruction `CREATE PROCEDURE' peut être exécutée :
Utilisateurs avec le privilège CREATE PROCEDURE
.
L’utilisateur qui a créé la procédure stockée devient son propriétaire.
CREATE PROCEDURE ADD_BREED (
NAME D_BREEDNAME, /* Les caractéristiques du domaine sont héritées */
NAME_EN TYPE OF D_BREEDNAME, /* Seul le type de domaine est hérité */
SHORTNAME TYPE OF COLUMN BREED.SHORTNAME, /* Hérite du type de colonne de table */
REMARK VARCHAR(120) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
CODE_ANIMAL INT NOT NULL DEFAULT 1
)
RETURNS (
CODE_BREED INT
)
AS
BEGIN
INSERT INTO BREED (
CODE_ANIMAL, NAME, NAME_EN, SHORTNAME, REMARK)
VALUES (
:CODE_ANIMAL, :NAME, :NAME_EN, :SHORTNAME, :REMARK)
RETURNING CODE_BREED INTO CODE_BREED;
END
Idem, mais la procédure sera exécutée avec les droits de l’utilisateur qui la définit (propriétaire de la procédure).
CREATE PROCEDURE ADD_BREED (
NAME D_BREEDNAME, /* Les caractéristiques du domaine sont héritées */
NAME_EN TYPE OF D_BREEDNAME, /* Seul le type de domaine est hérité */
SHORTNAME TYPE OF COLUMN BREED.SHORTNAME, /* Hérite du type de colonne de table */
REMARK VARCHAR(120) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
CODE_ANIMAL INT NOT NULL DEFAULT 1
)
RETURNS (
CODE_BREED INT
)
SQL SECURITY DEFINER
AS
BEGIN
INSERT INTO BREED (
CODE_ANIMAL, NAME, NAME_EN, SHORTNAME, REMARK)
VALUES (
:CODE_ANIMAL, :NAME, :NAME_EN, :SHORTNAME, :REMARK)
RETURNING CODE_BREED INTO CODE_BREED;
END
CREATE PROCEDURE gen_rows (
start_n INTEGER NOT NULL,
end_n INTEGER NOT NULL
) RETURNS (
n INTEGER NOT NULL
)
EXTERNAL NAME 'udrcpp_example!gen_rows'
ENGINE udr;
ALTER PROCEDURE
Pour modifier une procédure stockée existante.
DSQL, ESQL
ALTER PROCEDURE procname [(<inparam> [, <inparam> ...])] [ RETURNS (<outparam> [, <outparam> ...]) ] <routine-body> Pour plus de détails, voir CREATE PROCEDURE.
L’instruction `ALTER PROCEDURE' vous permet de modifier la composition et les caractéristiques des paramètres d’entrée et de sortie, des variables locales, des curseurs nommés et du corps de la procédure stockée.Pour les procédures externes (UDR), vous pouvez modifier le point d’entrée et le nom du moteur.Les privilèges et dépendances existants sont conservés après l’exécution.
Warning
|
Soyez prudent lorsque vous modifiez le nombre et les types de paramètres d’entrée et de sortie des procédures stockées.Le code d’application existant peut devenir inapplicable parce que le format d’appel de procédure est incompatible avec la nouvelle description des paramètres.En outre, les modules PSQL qui utilisent la procédure stockée modifiée peuvent devenir invalides.Des informations sur la manière de détecter cela peuvent être trouvées dans l’application Field RDB$VALID_BLR. |
L’instruction `ALTER PROCEDURE' peut être exécutée :
Le propriétaire de la procédure stockée ;
Les utilisateurs avec le privilège ALTER ANY PROCEDURE
.
ALTER PROCEDURE GET_EMP_PROJ (
EMP_NO SMALLINT)
RETURNS (
PROJ_ID VARCHAR(20))
AS
BEGIN
FOR SELECT
PROJ_ID
FROM
EMPLOYEE_PROJECT
WHERE
EMP_NO = :emp_no
INTO :proj_id
DO
SUSPEND;
END
CREATE OR ALTER PROCEDURE
Pour créer une nouvelle procédure stockée ou modifier une procédure existante.
DSQL, ESQL
CREATE OR ALTER PROCEDURE procname [(<inparam> [, <inparam> ...])] [ RETURNS (<outparam> [, <outparam> ...]) ] <routine-body> Pour plus de détails, voir CREATE PROCEDURE.
L’instruction CREATE OR ALTER PROCEDURE
crée une nouvelle procédure stockée ou modifie une procédure existante.Si la procédure stockée n’existe pas, elle sera créée en utilisant la proposition CREATE PROCEDURE
.S’il existe déjà, il sera modifié et compilé avec les privilèges et dépendances existants préservés.
CREATE OR ALTER PROCEDURE GET_EMP_PROJ (
EMP_NO SMALLINT)
RETURNS (
PROJ_ID VARCHAR(20))
AS
BEGIN
FOR SELECT
PROJ_ID
FROM
EMPLOYEE_PROJECT
WHERE
EMP_NO = :emp_no
INTO :proj_id
DO
SUSPEND;
END
CREATE PROCEDURE,ALTER PROCEDURE,RECREATE PROCEDURE,DROP PROCEDURE.
DROP PROCEDURE
Suppression d’une procédure stockée existante.
DSQL, ESQL
DROP PROCEDURE procname
Paramètre | Description |
---|---|
procname |
Le nom de la procédure stockée. |
L’instruction DROP PROCEDURE
supprime une procédure stockée existante.Si des dépendances existent sur la procédure stockée, une erreur sera générée si une tentative est faite pour supprimer une telle procédure.
L’instruction DROP PROCEDURE
peut être exécutée :
<<fblangrefre-security-administrators,Administrateurs
Le propriétaire de la procédure stockée ;
Utilisateurs avec le privilège DROP ANY PROCEDURE
.
DROP PROCEDURE GET_EMP_PROJ;
RECREATE PROCEDURE
Pour créer une nouvelle procédure stockée ou recréer une procédure existante.
DSQL, ESQL
RECREATE PROCEDURE procname [(<inparam> [, <inparam> ...])] [ RETURNS (<outparam> [, <outparam> ...]) ] <routine-body> Pour plus de détails, voir CREATE PROCEDURE.
L’instruction `RECREATE PROCEDURE' crée une nouvelle procédure stockée ou recrée une procédure existante.Si une procédure portant ce nom existe déjà, l’opérateur tentera de la supprimer et de créer une nouvelle procédure.L’opération échouera lors de la confirmation de la transaction si la procédure a des dépendances.
Note
|
Notez que les erreurs de dépendance ne sont pas détectées avant la phase de confirmation de la transaction. |
Une fois que la procédure a été recréée, les privilèges d’exécution de la procédure stockée et les privilèges de la procédure stockée elle-même ne sont pas conservés.
RECREATE PROCEDURE GET_EMP_PROJ (
EMP_NO SMALLINT)
RETURNS (
PROJ_ID VARCHAR(20))
AS
BEGIN
FOR SELECT
PROJ_ID
FROM
EMPLOYEE_PROJECT
WHERE
EMP_NO = :emp_no
INTO :proj_id
DO
SUSPEND;
END