语法错误在SQL中为Postgres 9数据库创建函数

时间:2017-05-18 08:12:40

标签: sql postgresql relational-database plpgsql postgresql-9.1

我正在尝试在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;

但是我收到以下错误:

ERROR: syntax error at or near "SELECT"

PS:我是Postgres数据库的新手。 如果你有很好的资源可以获得关于如何在plpgsql或SQL中为Postgres数据库创建函数和触发器的教程和书籍,这将非常棒!

2 个答案:

答案 0 :(得分:1)

您可以按照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;

答案 1 :(得分:0)

PostgreSQL有两种默认语言用于存储过程(函数):PLpgSQL和SQL。 SQL是原始SQL。 PLpgSQL是基于ADA的过程语言,具有块结构 - 块由关键字BEGIN,END定义。您可以用这两种语言编写函数。您应该正确指定语言。

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;

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;

9.1中的SQL语言不支持命名参数,因此您应该使用$ 1,$ 2,...作为参数。