【问题标题】:unable to us update inside if condition in oracle SQL developer无法在 oracle SQL 开发人员中更新内部 if 条件
【发布时间】:2019-05-22 08:37:57
【问题描述】:

我正在创建一个变量并检查该变量是否匹配,然后更新一个表,但它不工作

尝试替换插入而不是更新,但更新符合我的要求

CREATE OR REPLACE PROCEDURE "SP1" AS
V1 INT;
V2 INT;
BEGIN

SELECT SUM(SALES) 
INTO V1
FROM "TABLE_A";

SELECT SUM(SALES) 
INTO V2
FROM "TABLE_B";

IF V1=V2
THEN
UPDATE "TABLE_C"
SET "COLUMN_1"=1;
END IF

END "SP1";

在上面的代码中,“TABLE_C”的“COLUMN_1”应该在没有发生的情况下设置为1

【问题讨论】:

  • 除了END IF 之后缺少分号(如果我是你,我会删除所有双引号),代码看起来不错。 TABLE_ATABLE_B 是否包含行?这些总和相等吗?必须,否则TABLE_C 不会更新。示例数据可能会有所帮助。
  • 是的,两个表都是一样的,我也使用分号。出于理解目的,我使用 " 来表示虚拟对象。同样使用上述标准,我没有得到输出
  • 您正在运行该程序吗?或者只是期望它通过编译过程来工作?
  • 是的,我运行了 proc 和“TABLE_C”的“COLUMN_1”,预计会有 1 个帖子运行 store proc 给我 null
  • 你是怎么执行的;您是在同一会话或不同会话中执行后检查表(可能不会显示更改,因为您尚未提交更改)?

标签: sql oracle plsql oracle-sqldeveloper plsqldeveloper


【解决方案1】:

有一个“COMMIT;”更新语句后在您的过程中丢失。添加它并再次运行。这将解决您的问题。

谢谢。

【讨论】:

  • 通常不建议在过程中添加事务控制(提交/回滚);一旦该过程成为大型链的一部分,就很容易忘记它的存在并以部分交易告终。启动事务并最终调用过程的最顶层进程应该决定是提交还是回滚,因为只有它拥有做出安全决定所需的所有信息。
  • 嗨,亚历克斯,感谢您的更新。是的,我同意你的看法。但在这种情况下,关于更新语句的决定是在函数内部做出的。所以我说在这种特殊情况下使用 COMMIT 是安全和好的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2022-07-19
  • 2015-11-09
  • 2021-03-10
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多