1

Je suis en train de créer la fonction suivante dans une base de données postgres_9:fonction de création Erreur de syntaxe dans SQL pour la base de données Postgres 9

CREATE OR REPLACE FUNCTION getUser(IN user_id INT8) 
RETURNS TABLE(id INT8, nom TEXT, prenom TEXT) 
AS $$ 
    BEGIN 
     SELECT id, nom, prenom 
     FROM security.users 
     WHERE id = user_id 
    END 
$$ LANGUAGE sql; 

Mais je reçois l'erreur suivante:

ERROR: syntax error at or near "SELECT" 

PS: I Je suis nouveau dans les bases de données Postgres. si vous avez de bonnes ressources pour les tutoriels et les livres sur la façon de créer des fonctions et des déclencheurs dans les bases de données SQLPPQL ou SQL pour les bases de données Postgres ce serait génial!

+2

Enlever 'BEGIN' et' END'. – klin

+0

Merci! mais maintenant j'ai une nouvelle ERREUR: 'ERREUR: la colonne" user_id "n'existe pas –

+0

Comment appelez-vous cette fonction? –

Répondre

0

PostgreSQL dispose de deux langues par défaut pour les procédures stockées (fonction): plpgsql et SQL. SQL est un SQL brut. PLpgSQL est un langage procédural basé sur ADA avec une structure de bloc - le bloc est défini par les mots-clés BEGIN, END. Vous pouvez écrire votre fonction dans ces deux langues. Vous devriez spécifier la langue correctement.

CREATE OR REPLACE FUNCTION getUser(IN user_id INT8) 
RETURNS TABLE(id INT8, nom TEXT, prenom TEXT) 
AS $$ 
BEGIN 
    RETURN QUERY SELECT id, nom, prenom 
       FROM security.users 
       WHERE id = user_id; 
END 
$$ LANGUAGE plpgsql; 

ou

CREATE OR REPLACE FUNCTION getUser(IN user_id INT8) 
RETURNS TABLE(id INT8, nom TEXT, prenom TEXT) 
AS $$ 
    SELECT id, nom, prenom 
    FROM security.users 
    WHERE id = $1 
$$ LANGUAGE sql; 

langage SQL 9.1 ne prend pas en charge les paramètres nommés, vous devez donc utiliser 1 $, 2 $, ... pour les paramètres.

1

Pouvez-vous essayer cette approche comme l'a suggéré dans ce Postgresql 9.1 Create Function

CREATE FUNCTION getUser(int) 
RETURNS TABLE(id int, nom text, prenom text) 
AS $$ SELECT id, nom, prenom 
     FROM security.users 
     WHERE id = $1 $$ 
LANGUAGE SQL; 
+0

maintenant je reçois 'ERROR: erreur de syntaxe à ou près de" SELECT "' –