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

Sha*_*haL 6 c++ oracle postgresql

插入后,该语句可与配合使用Oracle。  

INSERT INTO table_name (col1, col2) VALUES (val1, val2) RETURNING col1 INTO :var ;
Run Code Online (Sandbox Code Playgroud)

我们可以将变量绑定到:var并执行该语句。

但是,当同一查询在Postgres数据库中运行时,会出现以下错误。

错误:“ INTO”处或附近的语法错误。

这种行为的原因是什么?

我试图在PL / pgSQL块中运行查询,它运行完美。

DO $$
DECLARE var integer;
BEGIN
  INSERT INTO "table_name "(
            "col1, "col2")
          VALUES (val1, val2)
          RETURNING "col1" INTO var;
END $$
Run Code Online (Sandbox Code Playgroud)

但是当我们连接到Postgres数据库时,上面的查询不能在没有PL / pgSQL块的情况下直接在C ++代码内部使用。我正在使用PostgreSQL 9.5.4。由于我们支持数据库不可知的软件应用程序,因此我们需要澄清这种行为。

我希望两个数据库都以相同的方式支持RETURNING .. INTO子句。

Lau*_*lbe 5

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

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

INSERT ... RETURNING可以像SELECT在PostgresSQL中一样进行处理-它返回结果集。

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