首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle中创建触发器,在更新数字之前触发该触发器,并检查该数字是否已被授权?

如何在Oracle中创建触发器,在更新数字之前触发该触发器,并检查该数字是否已被授权?
EN

Stack Overflow用户
提问于 2019-12-04 12:02:46
回答 1查看 37关注 0票数 0

我希望我的触发器确定ApprUserNo = SubmitUserNo或OrgParentNo。到目前为止,我的扳机是:

代码语言:javascript
复制
CREATE OR REPLACE TRIGGER cteam_Trigger1
BEFORE INSERT OR UPDATE OF ApprUserNo
   ON cteam_ExpenseReport
   FOR EACH ROW
DECLARE 


    ApprOrgNo cteam_Users.UserOrgNo%TYPE;
    SubUserOrgNo cteam_Users.UserOrgNo%TYPE;
    UserOrgParentOrg cteam_OrgUnit.OrgParentNo%TYPE;
    Unauthorized EXCEPTION;
    ErrorMessage VARCHAR2(200);

BEGIN
   SELECT UserOrgNo
     INTO ApprOrgNo
     FROM cteam_Users
     WHERE UserOrgNo = :NEW.ApprUserNo;

    SELECT UserOrgNo 
    INTO SubUserOrgNo
    FROM cteam_Users
    WHERE UserOrgNo = :NEW.SubmitUserNo;

    SELECT DECODE OrgParentNo (UserOrgParentNo,'Null',Raise Unauthorized )
    INTO UserOrgParentNo
    FROM cteam_OrgUnit;
    WHERE UserOrgParentNo = :NEW.OrgParentNo;

    EXCEPTION
    WHEN Unauthorized THEN
     ErrorMessage := 'Unauthorised to update ' ;


END;

触发器可以正常运行,直到选择解码部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-04 12:42:11

  1. FROM cteam_OrgUnit; -分号不应该在那里。
  2. 你的解码格式不正确。也许你想写:

解码(OrgParentNo UserOrgParentNo,'Null',引发未经授权)

但是,在解码器中不能有可执行语句(如RAISE UNAUTHORIZED ),它只处理值。我建议您将代码重写为

为每一行创建或替换触发器cteam_Trigger1 (在cteam_ExpenseReport上插入或更新ApprUserNo ),声明vUserOrgParentNo cteam_OrgUnit.OrgParentNo%TYPE;开始从cteam_OrgUnit ou选择ou.OrgParentNo to vUserOrgParentNo,其中ou.OrgParentNo = :NEW.OrgParentNo;如果vUserOrgParentNo <> :NEW.ApprUserNo,RAISE_APPLICATION_ERROR(-20000,“未经授权更新”);结束IF;END;

我删除了获取数据且从未使用的SELECT语句;同样,我删除了与这些选择相关的变量。我用一个案例表达式替换了解码,因为我发现一个案例表达式更容易阅读。我建议您在变量前加上一个额外的字符,例如我添加到vUserOrgParent中的vUserOrgParent,以防止变量名与表中的列名发生冲突。这是问题的潜在来源,比其他任何问题都更容易解决。对于表中正确的列名,我也作了一些猜测--如果它们是错误的,请随意修改它们。

触发器也不能返回错误消息。他们与其他代码“沟通”的唯一方法是引发异常。我向RAISE_APPLICATION_ERROR添加了一个调用,这样触发器就可以引发一个已知的异常号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59175613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档