如何在参数化查询中调用 oracle 函数?
我有许多自动生成的数据访问类来处理诸如插入和插入之类的事情。更新。
这些看起来像:
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。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不,你不能。绑定变量是一个文字,您不能指定要执行的包。
您可以考虑在基础表上使用触发器,如果 f1 为空,则用 pkg.getMyValue 填充 f1:
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: