2017-04-10 5 views
0

テーブル内のフィールド、特にSubcategory VarChar(50)カラムに文字列値を格納する必要があります。beforeinsertトリガのフィールドに値を条件付きで入力するには、どのようなコードが必要ですか?

この後処理の前のSubcategoryの値は0または1です。私はそれを人間に優しい価値に変える必要があります。

私は何十年にもデータベーストリガーを作成しておらず、コードの助けが必要です。これは私の擬似SQL(SQLとVBの寄せ集め)である:

CREATE OR REPLACE TRIGGER tr_CustomerCategoryLog_BeforeInsert 
BEFORE INSERT ON CustomerCategoryLog FOR EACH ROW 

DECLARE _Category = :new.Category; 
DECLARE _Subcategory = :new.Subcategory; 

BEGIN 
    If _Category = "New" 
     If _Subcategory = 0 
      :new.Subcategory := 'New'; 
     End If 
     Else If _Subcategory = 1 
      :new.Subcategory := 'Assumed'; 
     End If  
    End If 

    If _Category = "Existing" 
      If _Subcategory = 0 
       :new.Subcategory := 'Existing'; 
      End If 
      Else If _Subcategory = 1 
       :new.Subcategory := 'Organic' 
      End If  
     End If 
     Return "Unknown" 
     End Function   
    END; 

ロジックは、半平易な英語では、明確でない場合は、次のとおりです。

Categoryフィールドの値が " Subcategoryの値が現在0であれば、Subcategoryフィールドの値も "New"に設定します。それ以外の場合は、 "Assumed"に設定します。

カテゴリフィールドの値が "Existing"の場合、サブカテゴリの値が現在0であれば、サブカテゴリフィールドの値も "Existing"に設定します。それ以外の場合は、 "Organic"に設定してください

Steely Danのアルバム「Trigger Logic」に耳を傾ける必要があるかもしれません。

UPDATE

私は答えが動作すると思いますが、それは私のために十分で完全ではありません。

上記のpseudoSQLにOracleコードが混在しているようですが、(CustomerCategoryLogテーブルにBeforeInsertトリガを作成するために)完全なコードはどのように表示される必要がありますか?

は、より多くのそれのようにこのです:

CREATE TRIGGER tr_CustomerCategoryLog_BeforeInsert 
ON CustomerCategoryLog 
INSTEAD OF INSERT 
AS 
BEGIN 
    SELECT 
     CASE 
      WHEN @Category = 'New'  
       THEN CHOOSE(@Subcategory + 1, 'New', 'Assumed') 
      WHEN @Category = 'Existing' 
       THEN CHOOSE(@Subcategory + 1, 'Existing', 'Organic') 
      ELSE 'Unknown' 
     END 
END 

+0

質問には「tsql」というタグが付けられています。 CREATE OR REPLACEはMicrosoft T-SQLでは見られませんが、Oracleでは見られます。 Ditto ':new'と' for each row'などです。どのデータベース管理システムでこれを記述しようとしていますか? –

+0

これは、SQL ServerのデータベースであるTSQLである必要があります。私はgoogleの要求に対応してそのコードを取得しました。 "どのようにしてtinsqlでbeforeinsertトリガを作成できますか?" TSQLで始まっていたにもかかわらず、そのページが上記のOracleのものを追加したことを確認してください。 –

+0

結局のところ、BeforeInsertに頼らずにVB.NETで作業できるようになりました。 http://stackoverflow.com/questions/43329262/how-can-i-add-an-inline-vb-net-method –

答えて

1

は、私は(おそらく文字の欠陥が...私はまた、マッシュポテトを好きではない)のトリガーを避ける傾向にあるが、次の図は、

Declare @Category varchar(50) = 'Existing' 
Declare @Subcategory int  = 1   -- works if BIT 

Select case when @Category = 'New'  then choose(@Subcategory+1,'New','Assumed') 
      when @Category = 'Existing' then choose(@Subcategory+1,'Existing','Organic') 
      else 'Unknown' end 

戻り、あなたのロジック簡素化することができ

Organic 
+0

マッシュポテトを踊ることができる限り、私は言わないでしょうあなたの嫌悪されたスパッドへの嫌悪感については何でも。 –

+0

私は明らかにOracleコードが混在しているので、(CustomerCategoryLogテーブルにBeforeInsertトリガを作成するために)完全なコードはどのように表示される必要がありますか? –

+0

オラクルの盲目で、あなたは確かに私がダンスを目撃したくない –

関連する問題