0

少し問題があり、助けを求めたいです:)

簡単にするために、Oracleデータベースを使用していて、テーブルの1つ、つまり以下に「チェック制約」を作成したいと考えています。

テーブル XY

属性 A || 属性 B || 属性 C

属性 A と B の場合、ユーザーは好きなものを追加できます。属性 C の場合、ユーザー定義関数を使用して「チェック制約」を使用したいと考えています。これは、A と B の組み合わせが有効かどうかをチェックします。

私の問題は、関数の入力パラメーターを実装する方法がわからないため、ユーザーがデータベースにエントリを作成している間にチェックを行うことができることです。

つまり、ユーザーはすでにA に 1 を追加し、B に 3 を追加しており、C のエントリを追加したい場合、(例) A + B = 4かどうかを確認したい

私は今バナナに行くので、あなたが私を助けてくれることを願っています x)

よろしくアレックス

編集(以下のコメントからコピー)

私は3つのテーブルを持っています:

  1. グループ
  2. GROUP_LIST
  3. TM

GROUPGROUPには aのID が含まれています。 はと のGROUP_LIST間の接続テーブルです。つまり、a を TMに接続していますが、1を複数の s fe に接続することは可能です。GROUPTMGROUP_LISTGROUPGROUPTM

GROUPID || TM
1       || 1
1       || 2
1       || 3
2       || 1

などなど、私の本当の問題は次のとおりです。ここで、入力しようとしているTMが同じGROUPIDに既に存在するかどうかをチェックするTM属性をチェックしたいと思います。私の意図が明確になったことを願っています...

4

3 に答える 3

3

特定の列に「正しい」値を入力するようユーザーに要求するのは、かなり無意味に思えます。通常の列として定義する代わりにC、計算列として定義することをお勧めします。

CREATE TABLE TBL
  (A    NUMBER,
   B    NUMBER,
   C    AS (A + B));

このようにして、C は常に正しく計算されます。

ここで SQLFiddle

幸運を祈ります。

編集

以下のコメントのOPからの情報に基づいて、この回答は実際のニーズに対応していないように見えるため、2番目の回答を追加しました(以下)。この回答を削除することを検討しましたが、重要な情報を追加するOPからのコメントが含まれているため(その後、質問に編集しました)、この回答をそのままにしておくことにしましたが、この回答をCommunity Wikiにすることで担当者の利益を失うことにしました。

于 2015-09-01T17:20:12.937 に答える
1

行外チェック制約構文を使用する場合、特定のテーブルの任意のフィールドで条件を定義できます。たとえば、次のようになります。

ALTER TABLE xy ADD CONSTRAINT mymulticheck CHECK (A + B = C);

このタイプの制約には多くの制限があることに注意してください。たとえば、ユーザー定義関数を使用することはできません。また、条件はすべての行で固定され、同一であることは明らかです。

于 2015-09-01T14:03:27.250 に答える