【问题标题】:How to define variable in function with Postgres [duplicate]如何使用 Postgres 在函数中定义变量 [重复]
【发布时间】:2019-04-26 01:59:19
【问题描述】:

我是 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】:

    好吧,在阅读了更多之后,我似乎已经解决了我的问题。当我想在同一功能中执行插入和选择时,我需要更改我的语言。所以我改变了这一行:

    来自

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

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2016-11-10
      • 2018-12-07
      • 1970-01-01
      • 2018-11-10
      相关资源
      最近更新 更多