无法在 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_A
和 TABLE_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