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));

このアプローチでは、次の 2 つの問題があります。

  1. Oracle 例外: 「ORA-01422: 正確なフェッチが、要求された行数を超えて返されます」
  2. クエリを変更して 1 行を取得する場合、手順は問題ありません (と思います) が、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 に答える