我目前正面临一个问题,即执行一项简单的任务,即现有客户的新工作在他们偿还债务之前不会被批准。我认为这很简单,直到我发现SQL-92断言在Oracle中不起作用...
我环顾网络,看到有可能做同样的事情,但有触发/检查约束。但是,我完全迷失了如何实现这一目标。
我的数据库结构如下:
Table invoice is in a one-to-many relationship with jobs
Table jobs is in a many-to-one relationship with client
目前我有:
CREATE TRIGGER check_debt
BEFORE UPDATE ON jobs
FOR EACH ROW
WHEN ((SELECT * FROM client WHERE clientNo =
(SELECT * FROM jobs WHERE jobNo =
(SELECT * FROM invoice WHERE status = 'Debt Owing'))))
COMMIT;
如您所见,我不知道如何使用触发器来模仿断言......
感谢任何帮助!
感谢。
注意:我正在练习使用SQL-92和SQL-99标准。
答案 0 :(得分:1)
当您对作业进行更新时,包括查询以检查发票的状态。
update jobs
set ...
where ... -- logic to select job to update
and not exists (
select *
from invoice
where ... -- insert join condition
and status = 'Debt Owing')
然后检查行是否已更新(方法取决于您正在使用的客户端)。