如何在 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 LINKDBA ROLE)会引发错误,但实际上已授予创建 DB-Link 的权限。