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

标签 c++ oracle postgresql

在插入之后,该语句在 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/

相关文章:

c++ - map.find() 看似随机返回 map.end()

oracle - 尝试通过 PL/SQL 导出 Oracle 给出的日期为 0000-00-00

sql - 使 `group by` 导致多列

c++ - 为什么 std::string_view 比 const char* 快?

c++ - 我在 CppCheck 中发现了错误吗?为什么我会在此处收到 "Null pointer dereference"错误?

sql - Oracle 相当于 T-SQL SET @var = @var + ' ' ;

计算分配/ Netty 的 SQL 查询

ruby-on-rails - PG gem 不会安装在 Rails 应用程序中:Gem::Ext::BuildError: ERROR: Failed to build gem native extension

python - SQLAlchemy 为 postgres JSON 列设置默认值

c++ - 仅允许特定类型的成员函数