如何将oracle函数作为参数化查询的一部分调用?

时间:2010-11-19 12:46:26

标签: asp.net oracle parameterized

我有许多自动生成的数据访问类来处理插件和放大器等内容。更新。

这些看起来像:

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的值 - 大部分时间它都是null。

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

1 个答案:

答案 0 :(得分:0)

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

如果它为null,您可以考虑使用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;
/