PLSQL调用过程If Exists子句



我使用的是Oracle 9i

提示伪代码

我有存储过程A:

PROCEDURE stored_proc_a
IS
BEGIN
    insert into...
END;

然后,我有存储过程B:

PROCEDURE stored_proc_b
IS
BEGIN
    stored_proc_a
    WHERE NOT EXISTS (SELECT * FROM...);
END;

正如您从我的伪代码中看到的,如果表中不存在给定的行,我希望过程B调用程序A

我找不到任何文档表明WHERE EXISTS子句可以与过程调用一起使用(示例显示了它与INSERT、UPDATE和DELETE的使用)。

我可以在过程调用中使用WHERE EXISTS吗?如果不能,在表中没有特定记录的情况下,执行过程调用的正确代码是什么?

正确的方法如下:

PROCEDURE stored_proc_b
    IS
        num_rows number;
    BEGIN
        select COUNT(*)  into num_rows
            FROM my_table
            WHERE my_table.xyz = 123; -- (whatever is appropriate)
        if num_rows < 1
        then
            stored_proc_a;
        end if;
    END;

感谢Nicholas Krasnov和WBAR在其他帖子上提供的信息。

另一种实现相同功能的方法,如果您想为多行调用它,并想在过程B-中使用表中的数据

PROCEDURE stored_proc_b
IS
BEGIN
    FOR rec IN (SELECT COL1 FROM <<TABLE1>> T1 WHERE NOT EXISTS (SELECT * FROM <<TABLE2>> T2...WHERE T1.JOIN_COL = T2.JOIN_COL))
    LOOP
        stored_proc_a;
    END LOOP;    
EXCEPTION
    WHEN OTHERS THEN
    rollback;
END;

相关内容

  • 没有找到相关文章

最新更新