在插入之后,该语句可以与Oracle
一起正常工作。
INSERT INTO table_name (col1, col2) VALUES (val1, val2) RETURNING col1 INTO :var ;
我们可以将变量绑定到:var
并执行该语句。
但是,当同一查询在Postgres数据库中运行时,会出现以下错误。
错误:“ INTO”处或附近的语法错误。
此行为的原因是什么?
我试图在PL / pgSQL块中运行查询,它运行良好。
DO $$
DECLARE var integer;
BEGIN
INSERT INTO "table_name "(
"col1, "col2")
VALUES (val1, val2)
RETURNING "col1" INTO var;
END $$
但是当我们连接到Postgres数据库时,以上查询不能在没有PL / pgSQL块的情况下直接在C ++代码内部使用。我正在使用PostgreSQL 9.5.4。由于我们支持与数据库无关的软件应用程序,因此我们需要澄清这种行为。
我希望两个数据库都以相同的方式支持RETURNING .. INTO子句。
答案 0 :(得分:5)
在PostgreSQL中,SQL语句INSERT ... RETURNING
不支持INTO
子句,与SELECT
相同。
两个语句仅在PL / pgSQL中支持INTO
。
您可以像处理PostgresSQL中的INSERT ... RETURNING
一样处理SELECT
,它会返回结果集。
我不知道为什么Oracle对待INSERT ... RETURNING
如此复杂并且与SELECT
不同。设计决定可能是在七十年代后期做出的。