テーブル内のフィールド、特に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
?
質問には「tsql」というタグが付けられています。 CREATE OR REPLACEはMicrosoft T-SQLでは見られませんが、Oracleでは見られます。 Ditto ':new'と' for each row'などです。どのデータベース管理システムでこれを記述しようとしていますか? –
これは、SQL ServerのデータベースであるTSQLである必要があります。私はgoogleの要求に対応してそのコードを取得しました。 "どのようにしてtinsqlでbeforeinsertトリガを作成できますか?" TSQLで始まっていたにもかかわらず、そのページが上記のOracleのものを追加したことを確認してください。 –
結局のところ、BeforeInsertに頼らずにVB.NETで作業できるようになりました。 http://stackoverflow.com/questions/43329262/how-can-i-add-an-inline-vb-net-method –