这个问题在这里已有答案:
我是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,这对于做这些简单的事情来说真是太容易了。我确信这个问题很简单,我不缺少对技术的新手,但有人可以指出我正确的方向,如何纠正这一点,因为它让我疯了。
谢谢,
读完后看起来更像是我解决了我的问题。当我想在同一个函数中执行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真的有帮助