0

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

PROCEDURE DeviceSearched(
   xml_out OUT XMLTYPE
)
IS
BEGIN

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

END DeviceSearched;

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

...
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# 中我没有任何结果。

我究竟做错了什么?

提前致谢

4

1 回答 1

1

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

  • 使用存储过程在 Oracle 中选择数据并不明显,它是一个 SQL Server 方法,为什么不使用简单的选择

  • 此处此处的示例将展示 ODP.Net 如何与 XML 一起使用
    您可能需要混合使用 ref corsur 和 XMLType 来解决问题

于 2013-03-18T18:36:36.400 回答