错误将在调用过程时发生,而不是在过程内部发生,因此您无法在该过程本身内将错误捕获为异常。一个可能的解决方案是使用验证参数的附加过程。在下面的示例代码中,该过程接受 VARCHAR2,但仅当参数实际上是数字so_arg_test.my_procedure
时才会调用。my_procedure_hidden
对于其他任何事情,它都会引发值错误。
CREATE OR REPLACE PACKAGE so_arg_test AS
PROCEDURE my_procedure (
p_x IN VARCHAR2
);
END so_arg_test;
/
CREATE OR REPLACE
PACKAGE BODY SO_ARG_TEST AS
procedure my_procedure_hidden (p_x IN NUMBER) AS
BEGIN
-- your code
dbms_output.put_line('Inside my_procedure_hidden');
END my_procedure_hidden;
procedure my_procedure (p_x IN VARCHAR2)
AS
BEGIN
IF VALIDATE_CONVERSION(p_x AS NUMBER) = 0 THEN
RAISE VALUE_ERROR;
END IF;
my_procedure_hidden (p_x => my_procedure.p_x);
END my_procedure;
END SO_ARG_TEST;
/