Procédures externes
{CREATE [OR ALTER] | RECREATE} PROCEDURE procname [(<inparam> [, <inparam> ...])]
RETURNS (<outparam> [, <outparam> ...])
EXTERNAL NAME <extname> ENGINE <engine>
[AS <extbody>]
<inparam> ::= <param_decl> [{= | DEFAULT} <value>]
<outparam> ::= <param_decl>
<value> ::= {literal | NULL | context_var}
<param_decl> ::= paramname <type> [NOT NULL] [COLLATE collation]
<extname> ::= '<module name>!<routine name>[!<misc info>]'
<type> ::= <datatype> | [TYPE OF] domain | TYPE OF COLUMN rel.col
<datatype> ::=
{SMALLINT | INT[EGER] | BIGINT}
| BOOLEAN
| {FLOAT | DOUBLE PRECISION}
| {DATE | TIME | TIMESTAMP}
| {DECIMAL | NUMERIC} [(precision [, scale])]
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(size)]
[CHARACTER SET charset]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(size)]
| BLOB [SUB_TYPE {subtype_num | subtype_name}]
[SEGMENT SIZE seglen] [CHARACTER SET charset]
| BLOB [(seglen [, subtype_num])]
Tous les paramètres d’une procédure externe peuvent être modifiés à l’aide de l’instruction ALTER PROCEDURE
.
ALTER PROCEDURE procname [(<inparam> [, <inparam> ...])]
RETURNS (<outparam> [, <outparam> ...])
EXTERNAL NAME <extname> ENGINE <engine>
[AS <extbody>]
Vous pouvez supprimer une procédure externe en utilisant l’instruction DROP PROCEDURE
.
DROP PROCEDURE procname
Paramètres | Description |
---|---|
procname |
Nom de la procédure stockée. Peut contenir jusqu’à 31 octets. |
inparam |
Description du paramètre d’entrée. |
outparam |
Description of the output parameter. |
module name |
Le nom du module externe dans lequel se trouve la procédure. |
routine name |
Nom interne de la procédure dans le module externe. |
misc info |
Informations définies par l’utilisateur à transmettre à la procédure du module externe. |
engine |
Nom du moteur pour l’utilisation des procédures externes. Spécifie généralement le nom de l’UDR. |
extbody |
Le corps de la procédure externe. Une chaîne de caractères littérale qui peut être utilisée par l’UDR à diverses fins. |
Nous ne décrirons pas ici la syntaxe des paramètres d’entrée et de sortie. Elle est parfaitement cohérente avec la syntaxe des procédures PSQL ordinaires, qui est décrite en détail dans le manuel du langage SQL
. Nous allons plutôt prendre des exemples de déclaration de procédures externes avec des explications.
CREATE PROCEDURE gen_rows_pascal (
start_n INTEGER not null,
end_n INTEGER not null
)
RETURNS (
RESULT INTEGER not null
)
EXTERNAL NAME 'pascaludr!gen_rows'
ENGINE UDR;
L’implémentation de la fonction se trouve dans le module pascaludr
. Dans ce module, la procédure est enregistrée sous le nom gen_rows
. Le moteur UDR y est utilisé pour exécuter la procédure externe.
CREATE OR ALTER PROCEDURE write_log (
message VARCHAR(100)
)
EXTERNAL NAME 'pascaludr!write_log'
ENGINE UDR;
L’implémentation de la fonction se trouve dans le module pascaludr
. Dans ce module, la procédure est enregistrée sous le nom write_log
. Le moteur UDR est utilisé pour exécuter la procédure externe.
CREATE OR ALTER PROCEDURE employee_pgsql (
-- Firebird 3.0.0 présente un bogue avec les procédures externes sans paramètres
dummy INTEGER = 1
)
RETURNS (
id TYPE OF COLUMN employee.id,
name TYPE OF COLUMN employee.name
)
EXTERNAL NAME 'org.firebirdsql.fbjava.examples.fbjava_example.FbJdbc
.executeQuery()!jdbc:postgresql:employee|postgres|postgres'
ENGINE java
AS 'select * from employee';
L’implémentation de la fonction se trouve dans la fonction statique executeQuery de la classe org.firebirdsql.fbjava.examples.fbjava_example.FbJdbc
. Le point d’exclamation " !" contient des informations sur la connexion à une base de données externe via JDBC. Le moteur Java est utilisé pour exécuter la fonction externe. Ici, dans le "corps" de la procédure externe, une requête SQL est transmise pour récupérer les données.
Note
|
Cette procédure utilise un stub qui passe un paramètre inutilisé. Ceci est dû au fait que dans Firebird 3.0 il y a un bogue avec le traitement des procédures externes sans paramètres. |