我是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,用它们做这些简单的事情要容易得多。我确信问题很简单,我很想念新手,但是有人可以向我指出正确的方法,以解决这个问题,因为它使我发疯。
谢谢
答案 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的更多内容 真的有帮助