PLSQL调用过程如果存在子句

时间:2014-09-17 02:48:17

标签: sql oracle stored-procedures plsql exists

我正在使用Oracle 9i。

Cue伪代码!

我有存储过程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,如果没有,基于表中是否缺少特定记录来执行过程调用的正确代码是什么?

2 个答案:

答案 0 :(得分:2)

正确的做法如下:

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 KrasnovWBAR了解其他帖子的信息。

答案 1 :(得分:0)

实现相同目标的另一种方法,如果你想为多行调用它并想要在程序B中使用Table中的数据

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;