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

本文关键字:过程中 读取 c#oracleXmlType 存储过程 存储 | 更新日期: 2023-09-27 17:59:17

我正试图以这种方式在存储过程中创建一个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#中我没有任何结果

我做错了什么?

提前感谢

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

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

  • 在Oracle中使用存储过程来选择数据是不相关的,这是SQL Server的一种方法,为什么不使用简单的选择呢

  • 这里和这里的例子将展示ODP.Net如何使用XML
    您可能需要混合使用ref-cosur和XMLType来解决问题