oracleは日付がリストに入る場所を見つける

私は航空会社の大学のコースワーク用のOracleデータベースを作成しています。今私はスタッフテーブルを持っているstaff_allocationsは、フライトテーブルのフライトのスタッフを割り当てます。

CREATE TABLE FLIGHT (
  FLIGHT_ID NUMBER(11) PRIMARY KEY,
  ROUTE_ID NUMBER(11) NOT NULL,
  PLANE_ID NUMBER(11) NOT NULL,
  PILOT_ID NUMBER(11) NOT NULL,
  DEPARTURE_TIME TIMESTAMP NOT NULL,
  ARRIVAL_TIME TIMESTAMP NOT NULL,
  FREE_SEATS NUMBER (4)
);

CREATE TABLE STAFF_ALLOCATION (
    FLIGHT_ID NUMBER(11) NOT NULL,
    EMPLOYEE_ID NUMBER(11) NOT NULL
);

飛行テーブルのroute_idがroutesテーブルを参照するようになりました。

CREATE TABLE ROUTE (
  ROUTE_ID NUMBER(11) PRIMARY KEY,
  START_ID VARCHAR2(3) NOT NULL,
  DESTINATION_ID VARCHAR2(3) NOT NULL,
  TRANSIT_ID VARCHAR2(3),
  IS_ACTIVE VARCHAR2(1),
  DISTANCE NUMBER (8,2),
  BASE_PRICE NUMBER (6,2)   
);

出発地ID、目的地ID、および中継IDはすべて、異なる空港コード(LHR、HAMなど)を指しています。

だから私はstaff_allocationのinsertの前にスタッフが新しいものと時間が重なる別の飛行に割り当てられているかどうかを調べるトリガーを作ろうとしています。また、スタッフが実際に飛行機の出発地と同じ国にいるかどうかをチェックする必要があります。

そうですね。

どのフライトのスタッフが既に割り当てられているかを見つける。 新しい飛行出発時間と既存の飛行出発時間を比較する。 飛行時間が衝突しない場合は、スタッフがすでに新しいstart_idの国にいるかどうかを確認してください

誰かが私のどちらかの例のコードで助けてくれるでしょうか、私が見ているべき/使用しているべき方向に私を向けることによって?これはoracleで何かを作成する私の初めてのことです。

乾杯。

0

2 答え

最初のチェックはとても簡単です。あなたが修正しているフライトの出発と到着を知っている場合、到着日時が現在のフライトの出発日よりも大きい、そのフライトの出発日時がその従業員の他のフライトが存在するかどうかを確認できます現在のフライトの到着日時の前に

そのような飛行が存在する場合、それは現在の飛行と重複します。しかし、これはOracleよりも論理的です。

もう一方のチェックは難しいです(データベースの場合)。特定の従業員の最新の到着を見つけ、従業員が到着する国として到着国を選択する必要があります。 これは仮説であることに注意してください。誰かが乗客として、またはバスで帰ってきた可能性があります。また、各従業員の出発点があることを確認する必要があります。だから、誰かの最初の飛行のためにすべてを許可するか、または従業員自身に国を登録する必要があります。後者の解決法は非常にうまく行きません。固定された場所に過ぎず、従業員が特定の日にどこにいるかは分かりません。だから私は新しい従業員のための割り当てを許可するだけで、この割り当てのための残りのことについては気にしない。

あなたが直面する主な問題は、同じテーブルの行レベルのトリガでテーブルをクエリできないことです。このためには、挿入されたレコードを覚えておき、挿入トリガーの後にテーブルレベルを書き込んでチェックを行う必要があります。

私はあなたにいくつかのコードを提供したいと思いますが、人々は自分のことを教えてくれることを続けています。だから私は自分の宿題をするつもりですが、私はあなたに実装を残します。 :)

1
追加された

私はあなたがトリガ構文とPL/SQLについて知っていると思います。

トリガをデバッグするのに役立つdbms_output.put_lineを確認するか、ステップポイントをサポートするツールを使用することをお勧めします。

あなたが船外に出ようとしている(ほとんど意図しない)場合は、挿入した飛行の割り当てが、挿入された国で開始された後に開始されているかどうかを確認しなければなりません。

あなたは飛行Bを挿入したい。飛行Aは米国からメキシコ、飛行Cはメキシコから私たちに行く。その後、メキシコからグアテマラへの飛行Bを挿入します。それは有効ですが、飛行Cを中断します。

よいフライト。

1
追加された