Процедура вызова 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;