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"

有没有办法通过将 _f1 设置为“特殊”值来做到这一点,而不更改更新 SQL 或设置参数的方式?只有在某些情况下,我才需要设置 f1 的值——大多数情况下,它将为空。

针对 oracle 11 使用 .net 2.0 和 system.data.oracleclient。

4

1 回答 1

0

不,你不能。绑定变量是文字,您不能指定要执行的包。

如果它为空,您可能会考虑在基础表上使用 pkg.getMyValue 填充 f1 的触发器:

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 回答