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

时间:2013-02-15 09:45:12

标签: c# stored-procedures ado.net plsql xmltype

我正在尝试以这种方式在存储过程中创建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));

采用这种方法的问题有两个:

  1. Oracle异常:“ORA-01422:精确提取的返回次数超过了请求的行数”
  2. 如果我修改查询以获得一行,那么程序就可以了(我认为),但在c#中我没有任何结果。
  3. 我做错了什么?

    提前致谢

1 个答案:

答案 0 :(得分:1)

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

  • 使用存储过程来选择Oracle中的数据并不关心,它是一个SQL Server approch,为什么不使用简单的选择

  • 示例herehere将说明ODP.Net如何与XML配合使用 您可能需要使用ref corsur和XMLType进行混合来解决问题