我在PL/SQL中有三个函数。函数1使用user_tab_privs检查用户是否对表A、B、C具有SELECT访问权限。如果用户没有访问任何表的权限,则存储缺失计数。函数2从表A、B、C中选择一些数据。最后,函数3检查函数1中的计数值是否>0。如果此条件为TRUE,则引发异常并打印计数,否则继续执行函数2并输出。当用户有任何缺少的权限时,脚本会抛出ORA-00942: table or view does not exist instead of raising exception
。当用户有任何缺少的访问权限时,如何输出raise_application_error而不是ORA-00942。
下面是最后一个函数的代码片段。
function function3 return clob is
..
BEGIN
missingcount := function1();
if missingcount >0 then
error := 'Failed ' || missingcount ');
raise_application_error(-20101, error );
ELSE
fun2output := function2 ();
end if;
END function3;
BEGIN
final := function3();
dbms_output.put_line(final);
END;
如何在用户有任何访问权限缺失时输出raise_application_error,而不是ORA-00942。
1条答案
按热度按时间jjhzyzn01#
你需要异常处理。捕获你想要的异常,并引发你想要的任何异常:
有两个预先命名的异常,您不必使用杂注来定义。比如
DUP_VAL_ON_INDEX
、NO_DATA_FOUND
或TOO_MANY_ROWS
以及其他六种。但是大多数异常没有名称,所以这就是您如何为它们给予名称,以便您可以仅对这些异常进行操作。或者,您可以使用WHEN OTHERS
捕获所有异常,并参考其内部的SQLCODE
函数来决定要做什么: