CREATE FUNCTION name ( [ ftype [, ...] ] ) RETURNS rtype AS definition LANGUAGE 'langname' |
nom de la fonction a créer
type des arguments de la fonction
retour type
Une chaîne définissant la fonction; les moyens dépendent du langage. Ce peut être un nom de fonction interne, le chemin vers un fichier objet, une requête SQL, ou texte en langage procédural.
peut être 'C', 'sql', 'internal' ou 'plname', où 'plname' est le nom d'un langage procédural créé. Voir CREATE LANGUAGE pour les détails.
CREATE FUNCTION permet à l'utilisateur Postgres d'enregistrer une fonction avec une base. Cet utilisateur est considéré comme le propriétaire de la fonction.
Voir le chapitre sur les fonctions dans le Guide du programmeur PostgreSQL pour plus d'information.
Utilisez DROP FUNCTION pour supprimer les fonctions utilisateur.
Postgres admet la fonction "redéfinition"; le même nom peut être utilisé pour différentes fonctions tant qu'elles ont des types arguments dictincts. Cependant, cette possibilité doit être utilisée avec précaution pour les fonctions INTERNAL et les fonctions en langage C.
Deux fonctions INTERNAL ne peuvent pas avoir le même nom en C sans provoquer d'erreur au moment de l'édition de liens. Pour éviter ça, donnez leur différents noms C (par exemple, utilisez les types arguments comme dans une partie du nom C), quand vous spécifiez ces noms dans la clause AS de CREATE FUNCTION. Si la clause AS est laissée vide CREATE FUNCTION suppose que le nom C de la fonction est le même que le nom SQL.
Pour les fonctions C chargées dynamiquement, le nom SQL de la fonction doit être le même que le nom de la fonction C, parce que la clause AS est utilisée pour donner le nom de chemin du fichier objet contenant le code C. Dans ces conditions il vaut mieux ne pas essayer de redéfinir les noms de fonction SQL. Ceci peut conduire a charger unefonction C ayant le même nom C qu'une fonction interne ou autre fonction chargée dynamiquement. Sur certaines plate-formes le chargeur dynamique peut saboter le lancement s'il y a un conflit de noms de fonctions C. Ainsi, même si ça fonctionne pour vous aujourd'hui, vous regretterez la redéfinition des noms plus tard quand vous essairez d'exécuter le code.
Pour créer une fonction SQL simple :
CREATE FUNCTION one() RETURNS int4 AS 'SELECT 1 AS RESULT' LANGUAGE 'sql'; SELECT one() AS answer; answer ------ 1 |
Pour créer une fonction C, appelant une routine depuis une bibliothèque utilisateur partagée. Cette routine particulière calcule une vérification numérique et retourne TRUE si la vérification numérique dans les paramètres de la fonction est correct. L'utilisation d'une contrainte CHECK est attendue.
CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool AS '/usr1/proj/bray/sql/funcs.so' LANGUAGE 'c'; CREATE TABLE product ( id char(8) PRIMARY KEY, eanprefix char(8) CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}') REFERENCES brandname(ean_prefix), eancode char(6) CHECK (eancode ~ '[0-9]{6}'), CONSTRAINT ean CHECK (ean_checkdigit(eanprefix, eancode)) ); |
CREATE FUNCTION est une extension du langage Postgres.
PSM pour Persistent Stored Modules. C'est un langage procedural et il était à l'origine espéré que PSM aurait été ratifié comme standard officiel en 1996. Au milieu de 1998, ce n'est pas encore le cas, mais il faut espérer que PSM deviendra un standard. |
CREATE FUNCTION name ( [ [ IN | OUT | INOUT ] etereable>eable> type [, ...] ] ) RETURNS rtype LANGUAGE 'langname' ESPECIFIC routine SQL-statement |