【问题标题】:How can I call an oracle function as part of a parameterized query?如何在参数化查询中调用 oracle 函数?
【发布时间】:2010-11-19 12:46:26
【问题描述】:

我有许多自动生成的数据访问类来处理诸如插入和更新之类的事情。

这些看起来像:

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。

【问题讨论】:

    标签: asp.net oracle parameterized


    【解决方案1】:

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

    您可以考虑在基础表上使用触发器,如果​​ 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;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      相关资源
      最近更新 更多