【问题标题】:Write a trigger for dbms [closed]为 dbms 编写触发器 [关闭]
【发布时间】:2021-03-28 18:59:46
【问题描述】:

我不知道该怎么办。

如果学士学位不是BCA或BCA,写一个不允许申请工作的触发器 百分比小于 60。 使用下表。申请人(姓名、学士、通过年限、百分比)

【问题讨论】:

  • please show use 1. 你到目前为止做了什么? 2. 输入表/数据 3. 预期输出
  • 另外:对于 what,RDBMS 是什么?触发器高度特定于供应商 - oracle 的触发器与 sql-serverpostgresql 不兼容 - 您针对的是哪个 RDBMS??

标签: sql database plsql rdbms


【解决方案1】:

首先这里不需要Trigger。

您可以按如下方式使用CHECK 约束:

ALTER TABLE Applicant
ADD CONSTRAINT CHECK (BachelorDegree <> 'BCA' OR Percentage > 60);

如果你真的想要一个触发器,那么你可以使用TRIGGERWHEN 子句,如下所示(这个解决方案假设当percentageBachelorDegree 为空时,它应该允许添加数据。如果这不是您的要求,那么您可以在WHEN 子句中相应地添加条件):

CREATE OR REPLACE TRIGGER APPLICANTS_TRG BEFORE
    INSERT OR UPDATE OF BACHELORDEGREE, PERCENTAGE ON APPLICANT
    FOR EACH ROW
    WHEN ( NEW.BACHELORDEGREE = 'BCA' AND NEW.PERCENTAGE < 60 )
BEGIN
    RAISE_APPLICATION_ERROR(-20000, 'Percentage must be above 60 for BCA applicants');
END;
/

【讨论】:

  • 显然这个问题是家庭作业中的一个练习,这就是它要求触发的原因。
  • 使用检查约束的更好方法是对每一列应用单独的约束,这将导致更清晰的错误。同样,对于触发器解决方案,最好分别验证每一列,并抛出一个焦点异常。
猜你喜欢
  • 2017-02-03
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多