1

重複の可能性:
チェック制約での日付の使用、Oracle

Oracleでチェック制約を作成するためにこのクエリを使用する

alter table "ADVERTISEMENT" add constraint "ADVERTISEMENT_DATE" check ( "AD_DATE" ad_date>=sysdate) /

しかし、エラーが発生しましたORA-00920: invalid relational operator

4

1 に答える 1

2

チェック制約は、常に真でなければならないデータに関するアサーションです。したがって、現在の日付を使用してチェック制約を強制しようとしても、まったく意味がありません。もし今日が真なら、明日は偽でなければならないからです。

これにはさまざまな方法がありますが、どれも完全に満足できるものではありません。

INSERT 文を発行する PL/SQL API を提供できます。これにより、列に常に SYSDATE が移入されるように制御できるからです。誰もが PL/SQL API を好むわけではありません。

その列のデフォルトとして SYSDATE を使用して表を定義できます。次に、テーブルに対するアクセス許可を使用して、他のユーザーが列にデータを入力できないようにします。これは、テーブルの所有者以外のユーザーに対してのみ機能します。

挿入トリガーと更新トリガーを使用して、ユーザーが割り当てた値を SYSDATE でオーバーライドできます。ただし、トリガーはパフォーマンスに影響を与えます。

于 2012-04-22T17:35:05.107 に答える