2011-07-28 1 views
1

トリガーを使用せずにOracleの列に条件付きDEFAULT値を設定する方法はありますか? は、私は、次のニーズを達成したい:トリガーを使用せずにOracleの列に条件付きDEFAULT値を設定する方法はありますか?

  1. 列ニューフィールドに「FLAG1」= 1つの[既定値は「4」でなければならない場合。
  2. "flag1" = 2の場合、Newfield列のデフォルト値は "5"でなければなりません。
+0

トリガーを使用すると何が問題になりますか? –

答えて

5

トリガーが原因です。それらを使用してください。

2

DEFAULT列は別の列を参照することができないため、これは不可能です。

あなたはおそらく、単にデフォルトはNULLとして残り、次にようにそれを調整するためのビューを持ってみましょうことができます:

create view mytable_view as 
select flag1, nvl(newfield, case flag1 when 1 then 4 
             when 2 then 5 
          end) as newfield 
from mytable; 
1

Newfieldが更新する必要がない場合には、あなたは、単にそれを実装することができTonyが示したように、または11gでは仮想列にすることができます。

0

'フラグ'が何らかのセッション(または文)レベルの場合は、SYS_CONTEXTが経由する可能性があります。おそらくBEFORE STATEMENTトリガーが、挿入されたすべての行のコンテキスト切り替えを回避している場合に発生します。

関連する問題