1

挿入や更新などを処理するために、自動生成されたデータアクセスクラスがいくつかあります。

これらは次のようになります。

cmd.CommandType = CommandType.Text
cmd.CommandText =  "UPDATE myTable set f1 = :f1, f2 = :f2, f3 = :f3 where id = :id"

cmd.Parameters.AddWithValue(":f1", _f1)
cmd.Parameters.AddWithValue(":f2", _f2)
cmd.Parameters.AddWithValue(":f3", _f3)
cmd.ExecuteNonQuery()

私がやりたいことをするためにSQLを書き直すとしたら、それは次のようになります

cmd.CommandText =  "UPDATE myTable set f1 = pkg.getMyValue, f2 = :f2, f3 = :f3 where id = :id"

更新SQLやパラメータの設定方法を変更せずに、_f1を「特別な」値に設定することでこれを行う方法はありますか? 特定の場合にのみ、f1 の値を設定する必要があります。ほとんどの場合、値は null になります。

Oracle 11 に対して .net 2.0 と system.data.oracleclient を使用します。

4

1 に答える 1

0

いいえ、できません。バインド変数はリテラルです。実行するパッケージを指定することはできません。

null の場合に f1 を pkg.getMyValue で埋める、基になるテーブルのトリガーを検討できます。

create or replace trigger myTrigger
before insert or update on myTable for each row
begin
  if :new.f1 is null
  then 
    :new.f1 := pkg.getMyValue;
  end if;
end;
/
于 2010-11-19T13:00:40.497 に答える