无法在 oracle SQL 开发人员中更新内部 if 条件

Posted

技术标签:

【中文标题】无法在 oracle SQL 开发人员中更新内部 if 条件【英文标题】:unable to us update inside if condition in oracle SQL developer 【发布时间】: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 你是怎么执行的;您是在同一会话或不同会话中执行后检查表(可能不会显示更改,因为您尚未提交更改)? 【参考方案1】:

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

谢谢。

【讨论】:

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

以上是关于无法在 oracle SQL 开发人员中更新内部 if 条件的主要内容,如果未能解决你的问题,请参考以下文章

长期 Oracle 开发人员/DBA 学习 SQL Server - 书籍推荐?

RazorSQL 和 sql 开发人员无法使用 docker 连接到 Mac 上的 oracle DB

安装 SQL Server 2017 开发人员版时 Oracle JRE 规则失败

在 Oracle 视图中更新数据

在 Oracle 上使用内部联接更新语句

如何在 Oracle SQL 开发人员中查看/执行授予的存储过程