Процедура вызова PLSQL, если существует

Я использую 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;

Как вы можете видеть из моего псевдокода, я хотел бы вызвать процедуру A из процедуры B, если данная строка не существует в таблице.

Я не могу найти какую-либо документацию, которая предложила бы, чтобы предложение WHERE EXISTS могло использоваться с вызовом процедуры (примеры показывают его использование с INSERT, UPDATE и DELETE).

Могу ли я использовать WHERE EXISTS с вызовом процедуры, и если нет, каким будет правильный код для вызова процедуры, основанный на отсутствии конкретной записи в таблице?

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;

Понимаю это благодаря Николаю Краснову и 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;
Другие вопросы по тегам