使用PostgreSQL RETURNING .. INTO子句将插入的值返回到变量中

时间:2019-05-17 05:13:49

标签: c++ oracle postgresql

在插入之后,该语句可以与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子句。

1 个答案:

答案 0 :(得分:5)

在PostgreSQL中,SQL语句INSERT ... RETURNING不支持INTO子句,与SELECT相同。

两个语句仅在PL / pgSQL中支持INTO

您可以像处理PostgresSQL中的INSERT ... RETURNING一样处理SELECT,它会返回结果集。

我不知道为什么Oracle对待INSERT ... RETURNING如此复杂并且与SELECT不同。设计决定可能是在七十年代后期做出的。