【问题标题】:Why do I see error for the following code?为什么我会看到以下代码的错误?
【发布时间】:2015-09-09 20:28:12
【问题描述】:

为什么我会看到错误?

begin insert into math_qage values(20,40);insert into math_qage(30,79); end;

错误:“插入”处或附近的语法错误 第 1 行:开始插入 math_qage 值(20,40);

这就是我想要做的:

使用 begin 和 end o/p 一次性插入多条记录

另外,我如何在下面添加加薪通知而不会出错?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    我看到多个错误...

    begin; -- semicolon here!
        insert into math_qage values(20,40); -- it's ok
        insert into math_qage values(30,79); -- forgot 'values' here!
    commit; -- not 'end'
    

    如上所述,即使没有事务,您也可以在一个请求中完成:

    insert into math_qage values (20,40), (30,79);
    

    【讨论】:

    • 这工作谢谢!我如何在这里使用加薪通知?即 RAISE NOTICE 'transaction id is :%', TXID_CURRENT();
    • Here你可以找到关于通知的答案。只能在PL/pgSQL代码块内使用;
    • 很遗憾,我不能使用 pl/pgsql 代码块,但必须检索 transactionid
    • 有什么办法可以做到吗?
    • 内部交易你可以select txid_current();。不确定第二种方法是否可行。 Postgres 为事务之外的每个查询提供一个新的事务 id。您可以尝试使用returning,但结果中的行数将与您插入的行数一样多。或者只是组合:启动事务,在一个查询中插入所有内容,获取事务 ID,然后提交。
    【解决方案2】:

    这很可能是因为BEGIN .. END 只能在存储过程或存储函数等过程体中使用。删除 begin 和 end 关键字,您可以修改 INSERT 语句,如下所示以插入多行

    insert into math_qage values (20,40), (30,79);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 2016-09-05
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2021-07-06
      相关资源
      最近更新 更多