如何在 PL SQL 中抛出异常?
How to throw an exception in PL SQL?
我有这个程序:
CREATE OR REPLACE PROCEDURE SCHEMA.check_privs(
can_grant OUT NUMBER
)IS
BEGIN
SELECT count(*) INTO can_grant
FROM USER_SYS_PRIVS usp
WHERE PRIVILEGE = 'CREATE DATABASE LINK';
EXCEPTION
WHEN can_grant = 0
DBMS_OUTPUT.PUT_LINE('error');
END;
如果 can_grant 为 0,我将如何抛出异常?
异常部分不起作用。
最简单的方法是这个:
BEGIN
SELECT count(*) INTO can_grant
FROM USER_SYS_PRIVS usp
WHERE PRIVILEGE = 'CREATE DATABASE LINK';
IF can_grant = 0 THEN
DBMS_OUTPUT.PUT_LINE('error');
RAISE_APPLICATION_ERROR(-20000, 'Count is zero');
END IF;
END;
请注意,可能还有其他权限(例如 CREATE PUBLIC DATABASE LINK
或 DBA
ROLE)会引发错误,但实际上已授予创建 DB-Link 的权限。
我有这个程序:
CREATE OR REPLACE PROCEDURE SCHEMA.check_privs(
can_grant OUT NUMBER
)IS
BEGIN
SELECT count(*) INTO can_grant
FROM USER_SYS_PRIVS usp
WHERE PRIVILEGE = 'CREATE DATABASE LINK';
EXCEPTION
WHEN can_grant = 0
DBMS_OUTPUT.PUT_LINE('error');
END;
如果 can_grant 为 0,我将如何抛出异常? 异常部分不起作用。
最简单的方法是这个:
BEGIN
SELECT count(*) INTO can_grant
FROM USER_SYS_PRIVS usp
WHERE PRIVILEGE = 'CREATE DATABASE LINK';
IF can_grant = 0 THEN
DBMS_OUTPUT.PUT_LINE('error');
RAISE_APPLICATION_ERROR(-20000, 'Count is zero');
END IF;
END;
请注意,可能还有其他权限(例如 CREATE PUBLIC DATABASE LINK
或 DBA
ROLE)会引发错误,但实际上已授予创建 DB-Link 的权限。