如何在参数化查询中调用 oracle 函数?

发布于 2024-10-03 07:48:09 字数 662 浏览 5 评论 0 原文

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

这些看起来像:

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。

I have a number of automatically generated data access classes to handle things like inserts & updates.

These look like:

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()

If I were to re-write the sql to do what I want, it would look something like

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

Is there any way to do this by setting _f1 to a "special" value, without changing the update SQL or the way the parameters are set? Only in certain cases will I need to set the value of f1 - most of the time, it will be null.

Using .net 2.0, and system.data.oracleclient against oracle 11.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柠檬 2024-10-10 07:48:09

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

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

No, you can't. A bind variable is a literal, you can't specify a package to be executed.

You might consider a trigger on the underlying table that fills f1 with pkg.getMyValue if it is null:

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;
/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文