PLSQL调用过程If Exists子句

PLSQL调用过程If Exists子句,sql,oracle,stored-procedures,plsql,exists,Sql,Oracle,Stored Procedures,Plsql,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 我找不到任何文档表明WHE

我正在使用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;

多亏了和他们在其他帖子上的信息,我们才明白这一点。

实现这一点的另一种方法是,如果您想为多行调用它,并想使用过程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;

小题大做;我想在SELECT语句中添加一个附加条件,其中ROWNUM<2,因为您只需确定是否存在,只需查找1行即可。这是可行的,但我认为至少在这里找到了一个更好的解决方案: