3

PL / SQLを使用して、比率に基づいて2つの異なるセットへのサンプルの分布を定義するconfigを含むテーブルを作成しています。これには、sample_type、set_1、set_2、ratio(set_1に送られるサンプルのパーセンテージ)の4つの列があります。たとえば、行が('walk'、'left'、'right'、50)の場合、タイプが'walk'のサンプルの場合、それらの50%が'left'になり、残りが'right'になります。

比率のみが100の場合、つまりサンプルの100%がset_1に送られる場合に、set_2がnullになるようにするチェック制約を追加したいと思います。私は次のようなことを試みます:

ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    NOT EXISTS (SELECT 1 FROM CONFIG WHERE SET_2 IS NULL AND RATIO <> 0)
)

ただし、Oracleではサブクエリのチェックは許可されていません。それで、この状況にチェック制約を追加する別の方法はありますか?

ありがとうございました

4

2 に答える 2

4
ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    (RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100)
)

それが要件であるかどうかは完全にはわかりませんでしたが、100の場合にSET_2をnullにする必要がある場合は、次のようにします。

ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    (SET_2 IS NULL AND RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100)
)
于 2012-08-30T17:31:51.627 に答える
1

だろう

ALTER TABLE CONFIG
ADD CONSTRAINT CHK
CHECK (
    SET_2 IS NULL AND RATIO <> 0
)

仕事?

于 2012-08-30T14:11:02.877 に答える