如何使用Postgres

时间:2019-04-26 01:59:19

标签: postgresql plpgsql stored-functions

我是Postgres的新手,这个问题使我感到沮丧。我确信我的语法正确,并且所有参考资料和其他帖子都向我表明可以。拜托,谁能帮我!

CREATE OR REPLACE FUNCTION "SomeSchema".insertDataAccessType(IN type_name char varying, IN created_by char varying)
  RETURNS SETOF "SomeSchema"."DataAccessTypes" LANGUAGE 'sql' AS
    $$
    DECLARE newId INTEGER;
        BEGIN
            INSERT INTO "SomeSchema"."DataAccessTypes"(type_name, created_by)
            VALUES (insertDataAccessType.type_name, insertDataAccessType.created_by)
            RETURNING id INTO newId;

            RETURN QUERY SELECT * FROM "SomeSchema".getdataaccesstypebyid(newId);
        END;
    $$;

我只是尝试创建此函数,该函数将插入一条记录,将新创建的ID添加到我声明的变量中,然后对新ID进行选择以返回结果集。我所得到的只是该死的错误消息!

ERROR:  syntax error at or near "INTEGER"
LINE 4:  DECLARE newId INTEGER;
                       ^
SQL state: 42601
Character: 215

我已经习惯了MSSQL,用它们做这些简单的事情要容易得多。我确信问题很简单,我很想念新手,但是有人可以向我指出正确的方法,以解决这个问题,因为它使我发疯。

谢谢

1 个答案:

答案 0 :(得分:0)

看完之后看起来好像我已经解决了我的问题。当我要在同一功能中执行插入和选择时,我需要更改语言。所以我改变了这一行:

RETURNS SETOF "SomeSchema"."DataAccessTypes" LANGUAGE 'sql' AS

TO

RETURNS SETOF "SomeSchema"."DataAccessTypes" LANGUAGE plpgsql AS

,该函数可以很好地创建并完美执行。希望这对其他Postgres新手有所帮助。此处Difference between language sql and language plpgsql in PostgreSQL functions和此处https://www.postgresql.org/docs/current/plpgsql-overview.html#PLPGSQL-ADVANTAGES的更多内容  真的有帮助