如何用Postgres定义函数中的变量[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我是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,这对于做这些简单的事情来说真是太容易了。我确信这个问题很简单,我不缺少对技术的新手,但有人可以指出我正确的方向,如何纠正这一点,因为它让我疯了。

谢谢,

postgresql plpgsql stored-functions
1个回答
0
投票

读完后看起来更像是我解决了我的问题。当我想在同一个函数中执行Insert和Select时,我需要改变我的语言。所以我改变了这一行:

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

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真的有帮助

© www.soinside.com 2019 - 2024. All rights reserved.