我想将触发器的执行条件设置为oracle用户。
如果是Oracle用户:X,则不执行触发器,否则是。
我创建了一个函数
CREATE OR REPLACE FUNCTION GET_SESSION_USER
RETURN NUMBER
IS
user_name_current VARCHAR2(50);
resultat NUMBER := 1;
BEGIN
user_name_current := USER;
IF user_name_current = 'X' THEN
resultat := 0;
end if;
RETURN resultat;
END;
在触发器中调用函数
CREATE OR REPLACE TRIGGER "TEST"."table1_trigger"
BEFORE UPDATE ON table1
FOR EACH ROW
-- WHEN (GET_SESSION_USER() = 1)
DECLARE
...
BEGIN
IF (GET_SESSION_USER() = 1) THEN
...
END IF;
-- WHEN (GET_SESSION_USER() = 1)
返回错误:ORA-04076:无效的NEW或OLD规范。因此我输入了一个if:if (GET_SESSION_USER() = 1) then
这行行可以,我必须做一个全局的if吗?我们可以做得更好吗?
谢谢
1条答案
按热度按时间nx7onnlm1#
为什么需要一个函数?在触发器中检查user-不是在它的
when
子句中,而是在if-then-else
中。为什么你不能在函数调用中使用
when
子句?因为create trigger文档说:测试:
在40触发器中硬编码SCOTT是一项乏味的工作,而且可能是无用的(如果你决定将代码移动到另一个模式中,而SCOTT变成PETER或其他东西)。在这种情况下,你可以创建函数并使用它-不是在触发器的
when
子句中,而是在if-then-else
中: