【问题标题】:Calling Oracle Function with "complex" return value from C#从 C# 调用具有“复杂”返回值的 Oracle 函数
【发布时间】:2010-03-18 17:57:25
【问题描述】:

我在包中定义了一个Oracle函数返回记录,所以可以这样做:

select a,b,c FROM my_function(...);

从 .NET 调用这个 oracle 函数就像执行普通的 sql 查询一样简单。

不幸的是,该函数现在必须进行更新,当像这样调用它时,Oracle 抱怨选择中不允许更新,这是有道理的。 所以现在我可以选择更改函数调用或拆分函数。 基本上我必须摆脱函数调用中的选择,并在 C# 中需要这样的东西:

EXEC :var:= my_func(...);

var 的类型是包中定义的自定义元组。 我已经尝试使用 ParameterDirection.ReturnValue 没有成功。有人有想法吗?

【问题讨论】:

标签: c# .net oracle stored-procedures


【解决方案1】:

您可以先执行您的函数,然后在一批中执行 select 语句。像这样的:

开始

EXEC var:=my_func(...);

选择 var.a、var.b、var.c ...;

结束;

【讨论】:

    【解决方案2】:

    正如 Andrew 所说,您可以(应该!)将您的功能拆分为它执行的两个不同(咳咳)功能:

    update data
    return data
    

    应尽可能避免存储过程/函数中的“隐藏魔法”。
    这提高了可读性和可维护性

    【讨论】:

    • 问题是更新依赖于选择,所以为了干净地分离它们,我需要在非常高的流量场景中调用多个数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多