如何从存储过程中读取 c# oracle XmlType

Posted

技术标签:

【中文标题】如何从存储过程中读取 c# oracle XmlType【英文标题】:How to read in c# oracle XmlType from store procedure 【发布时间】:2013-02-15 09:45:12 【问题描述】:

我正在尝试以这种方式在存储过程中创建 XML:

PROCEDURE DeviceSearched(
   xml_out OUT XMLTYPE
)
IS
BEGIN

    SELECT 
      XMLELEMENT("Values", 
          XMLFOREST(de_brand)
    ) 
    INTO xml_out
    FROM 
      tbldevice de 
    ;  

END DeviceSearched;

我试图以这种方式在 c# 中读取xml_out

...
OracleCommand command = new OracleCommand(name, conn);
command.CommandType = CommandType.StoredProcedure;
command.BindByName = true;
...
command.Parameters.Add(new OracleParameter("xml_out", OracleDbType.XmlType, ParameterDirection.Output));

使用这种方法有两个问题:

    Oracle 异常:“ORA-01422:精确提取返回的行数超过了请求的行数” 如果我修改查询以获取一行,程序是好的(我认为),但在 c# 中我没有任何结果。

我做错了什么?

提前致谢

【问题讨论】:

有没有关于它的完整源代码示例? 【参考方案1】:

跑步SELECT XMLELEMENT("Values",XMLFOREST(de_brand)) FROM tbldevice de 在 plsql 中将 NOT 产生单个值,因此尝试将结果提取到单个变量 (INTO xml_out) 将导致运行时错误 ORA-01422

不了解在 Oracle 中使用存储过程选择数据,它是一种 SQL Server 方法,为什么不使用简单的选择

示例 here 和 here 将展示 ODP.Net 如何使用 XML 你可能需要混合使用 ref corsur 和 XMLType 来解决这个问题

【讨论】:

以上是关于如何从存储过程中读取 c# oracle XmlType的主要内容,如果未能解决你的问题,请参考以下文章

请问如何从数据库中读取一个存储过程并把查询结果生成一个xml文件(c#)

C#:使用存储过程从数据库中读取图像

从 C# 执行 Oracle 存储过程 - 调用中的参数数量或类型错误

如何从 java 程序中读取存储过程源代码? [复制]

如何在 C# 中测试来自 Oracle 的参数

从 Oracle 的 C# 脚本输出中读取