0

我目前在执行一项简单任务时遇到问题,在该任务中,现有客户的新工作在他们还清债务之前不会获得批准。我认为这会很简单,直到我发现 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 标准。

4

1 回答 1

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')

然后检查是否更新了一行(方法取决于您使用的客户端)。

于 2012-05-03T15:58:32.957 回答