如何编写 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;
我有触发器
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;