【问题标题】:plsql update trigger that restricts update if client is not active如果客户端不活动,则限制更新的 plsql 更新触发器
【发布时间】:2022-01-19 00:31:30
【问题描述】:
CREATE OR REPLACE TRIGGER CLIENTS_DISCOUNT
    BEFORE INSERT OR UPDATE 
    OF DISCOUNT
    ON CLIENTS
    FOR EACH ROW
    BEGIN
    IF (NEW.ISACTIVE = 'N')
    THEN RAISE_APPLICATION_ERROR
    (-20001, 'CUSTOMER IS NOT ACTIVE')
    END IF;
END;

示例客户表:

CREATE TABLE clients (ClientID, ClientName, Discount, isActive, PrimarySiteID) AS
SELECT  1, '21st Century Fox',  5, 'Y',  1 FROM DUAL UNION ALL
SELECT  2, 'Erikson',          10, 'N',  2 FROM DUAL UNION ALL
SELECT  3, 'It Smart Group',    5, 'Y',  3 FROM DUAL UNION ALL
SELECT  4, 'UPC',               5, 'N',  4 FROM DUAL UNION ALL
SELECT  5, 'Telekom',          15, 'Y',  5 FROM DUAL UNION ALL
SELECT  6, 'ExxonMobil',       10, 'N',  6 FROM DUAL UNION ALL
SELECT  7, 'Biolife Grup',     20, 'Y',  7 FROM DUAL UNION ALL
SELECT  8, 'Apple Inc.',        0, 'N',  8 FROM DUAL UNION ALL
SELECT  9, 'AECOM',             5, 'Y',  9 FROM DUAL UNION ALL
SELECT 10, 'Metro',            10, 'N', 10 FROM DUAL;

我想在插入或更新触发器之前创建一个 PL/SQL,以限制不活跃的客户更新他们的折扣。我不确定我是否需要声明一些东西。

【问题讨论】:

  • 好的。伟大的。你有什么尝试? MySQL 不是甲骨文。您在标题中提到了 PL/SQL,即 Oracle。你指的是哪个数据库?删除不正确的标签。
  • 我正在使用 oracle,我正在尝试确定是否需要声明某些内容。
  • 请不要发布图片链接。人们不会打开它们。以文本/表格或数据库 DDL 语句的形式发布问题。您还需要显示 DISCOUNT 表的 DDL。
  • 感谢您的建议,这里很新!希望现在好多了

标签: oracle plsql triggers


【解决方案1】:

我不确定是否需要声明一些东西。

不,如果您不打算声明任何变量,则不需要 DECLARE 关键字。

A trigger has the syntax:

trigger_body ::=

syntax for a PL/SQL block 是:

这表明DECLARE 是可选的。


您需要做的就是检查IF :NEW.isActive(或:OLD.isActive)是否等于N,如果是THEN,则使用RAISE_APPLICATION_ERROR 生成用户定义的错误并防止插入/更新。

【讨论】:

  • 好的,这就是我尝试使用的,感谢您帮助我理解!
猜你喜欢
  • 1970-01-01
  • 2018-02-02
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多