2012-01-23 7 views
0

この問題は、改訂版のペーパーに記載されています。私は質問には関係がないので、他の関係を外にしました。ORACLE:記事が含まれる可能性のある問題の数を制限するための制約

は、次の関係を考えてみましょう: 条(乾燥し、タイトル、雑誌、発行、今年、スタートページ、ENDPAGE)

は、どのように私はこれ以上5以下の記事がで公開することができる確実にする制約を作りに行きますか一つの特別な問題?右、

CREATE ASSERTION ArticlesInIssue 
CHECK(
(SELECT COUNT(Issue) FROM Article) <= 5); 

私はそれが特定の問題のためにカウントされないよう、これは完全には機能しないだろうと思う。

私のようなものは何でしょうか?だからwhere句が必要なのでしょうか、ここで全く間違った方向に進んでいますか? おかげで、 ミズーリ州

+0

SQLの何味? MySQL、SQL Server、Oracle?オラクル、 – MatBailie

+0

私は更新します。 –

+1

CHECK句に指定された条件は、ブール値と評価され、SYSDATE、USER、USERENV、およびUIDなどのクエリまたは環境関数を使用できません。制約を使用する必要がありますか、またはプロシージャを使用できますか? –

答えて

1

は、挿入時に発動triggerを書きます。トリガにSQLを記述して、挿入しようとしているテーブルを照会し、そのチェックを行うことができます。コードで明示的に挿入をロールバックする必要があります。

問題の列にインデックスがあることを願っています!

0

一つの可能​​な解決策は、articleNo NUMBER(1) NOT NULL列と制約を追加することです:

UNIQUE (issue, articleNo) 

CHECK (articleNo BETWEEN 1 AND 5) 
関連する問題