Процедура не возвращает значение. Функция возвращает значение, но вы не должны делать DML в функции (иначе вы не можете делать что-то вроде ссылки на функцию в операторе SQL, вы путаете предоставление разрешений, поскольку обычно администраторы баз данных хотят иметь доступ только для чтения пользователям ко всем функциям, чтобы пользователи последовательно выполняли вычисления и т. д.).
Вы можете добавить параметр OUT в процедуру для возврата статуса. Если «success» означает, что одна или несколько строк были обновлены, вы можете использовать SQL% ROWCOUNT, чтобы получить счетчик количества строк, измененных предыдущим оператором SQL, и использовать его для заполнения возвращаемого параметра, т.е.
CREATE OR REPLACE PROCEDURE test_proc (
p_iKey IN VARCHAR2,
p_retVal OUT INTEGER
)
AS
BEGIN
DELETE FROM myTable
WHERE theKey = p_iKey;
IF( SQL%ROWCOUNT >= 1 )
THEN
p_retVal := 1;
ELSE
p_retVal := 0;
END IF;
END test_proc;
Конечно, с точки зрения общей ясности кода, я сомневаюсь в параметрах OUT, которые, похоже, пытаются вернуть код состояния. Как правило, вам гораздо лучше, если вы добьетесь успеха и выбросите исключения в случае ошибки.