SQL / Oracle 10g - 断言问题

时间:2012-05-03 15:44:02

标签: sql oracle oracle10g

我目前正面临一个问题,即执行一项简单的任务,即现有客户的新工作在他们偿还债务之前不会被批准。我认为这很简单,直到我发现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标准。

1 个答案:

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

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