在插入之后,该语句在 Oracle
中运行良好。
INSERT INTO table_name (col1, col2) VALUES (val1, val2) RETURNING col1 INTO :var ;
我们可以将变量绑定(bind)到 :var
并执行语句。
但是,当相同的查询在 Postgres 数据库中运行时,会出现以下错误。
ERROR: syntax error at or near "INTO".
这种行为的原因是什么?
我尝试在 PL/pgSQL block 中运行查询,结果运行良好。
DO $$
DECLARE var integer;
BEGIN
INSERT INTO "table_name "(
"col1, "col2")
VALUES (val1, val2)
RETURNING "col1" INTO var;
END $$
但是当我们连接到 Postgres 数据库时,上面的查询不能在没有 PL/pgSQL block 的情况下直接使用内部 C++ 代码。我正在使用 PostgreSQL 9.5.4。由于我们支持与数据库无关的软件应用程序,因此我们需要澄清这种行为。
我希望两个数据库都以相同的方式支持 RETURNING .. INTO 子句。
最佳答案
在 PostgreSQL 中,SQL 语句 INSERT ... RETURNING
不支持 INTO
子句,与 SELECT
相同。
这两个语句仅在 PL/pgSQL 中支持 INTO
。
您处理 INSERT ... RETURNING
就像 PostgresSQL 中的 SELECT
— 它返回一个结果集。
我不知道为什么 Oracle 将 INSERT ... RETURNING
处理得如此复杂并且与 SELECT
不同;设计决定可能是在七十年代后期才做出的。
关于c++ - 使用 PostgreSQL RETURNING .. INTO 子句将插入的值返回到变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56180013/