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 に答える