如何编写 sql 逻辑以在不允许时触发(当表相同时正在更新什么)

how to write sql logic to trigger when it is not permitted (when tables are same what is updating)

我有触发器

 BEFORE  UPDATE  ON  USER_ROLES

我知道如果我在触发器中写"SELECT FROM USER_ROLES",我会得到"mutating, trigger/function error"。这是真的,没问题! 如果我 select 来自我正在更新的同一个 table,我会遇到那个错误 - 我知道那个,很好。

但是我应该select(没办法)一样table为了检测用户是否有权更新 table。例如:

BEGIN
      /* check if update causes loop in tree */
      SELECT count(rol.id) INTO cnt
      FROM  USER_ROLES rol
      WHERE rol.id=:old.id
      START WITH rol.id = :new.parent_id
      CONNECT BY PRIOR rol.id = rol.parent_id ;

        IF( cnt > 0 )
                  THEN
                  ....
        END IF;

        ....
 END;

我知道会有"mutating, trigger/function error"但是解决方案在哪里?更新前,如何检查客户端是否有权限?我可以不写 "SELECT" 做类似的事情吗?

DECLARE  PRAGMA AUTONOMOUS_TRANSACTION;