【问题标题】:Trigger Cannot query on same table?触发器无法在同一张表上查询?
【发布时间】:2015-05-12 15:15:32
【问题描述】:

我想在表 Customer 上创建一个 BEFORE INSERT OR UPDATE TRIGGER 触发器:

Create table customer
(CustNum Number,
DebitNum Number
);

我需要在触发器中做的验证是没有为客户分配两次相同的 DebitNum。

所以我的触发代码是:

CREATE OR REPLACE TRIGGER XX_MYTRIG
BEFORE INSERT OR UPDATE
ON CUSTOMER
DECLARE
ln_count Number;
BEGIN
    Select count(CustNum) into ln_count
    from customer
    where CustNum:=:New.CustNum 
    and DebitNum:=NEW.DebitNum;
    IF ln_count>0 then
        RAISE fnd_api.g_exc_error;
    END IF;
END;

当我插入或更新时,我注意到选择语句甚至没有被执行。 如何查询同一张表...?

【问题讨论】:

  • 您的数据模型令人费解。我们希望 CUSTNUM 是名为 CUSTOMER 的表的主键。那么如何给任何客户一个以上的 DEBITNUM,重复或其他方式?
  • 你的意思是不能给一个客户两次分配同一个DebitNum;或者不能为两个客户分配相同的 DebitNum?你怎么知道选择没有被执行——除了你在你发布的代码中的第二个 NEW 之前缺少一个冒号,所以触发器可能是无效的?

标签: oracle plsql triggers


【解决方案1】:

我认为您可以通过在 CustNum 和 DebitNum 列上添加唯一约束来实现这一点。这种方法将比使用触发器实现更有效。

ALTER TABLE customer
ADD CONSTRAINT constraint_name UNIQUE (CustNum , DebitNum);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2019-08-20
    • 1970-01-01
    • 2011-03-07
    • 2021-12-20
    相关资源
    最近更新 更多