1


2

NETデータテーブルでは、列はオブジェクト型で、列の有効な型としてデータテーブルを含めることができます。 それで、あなたはかなり複雑な構造を作ることができます:
CompanyID(整数)| CompanyName(文字列)| OrderRecords(DataTable)---------------------------------------------- ----------------------------- 1 |アクメ株式会社 |注文のデータテーブル

Oracleストアドプロシージャを呼び出すときに、そのような構造を返す方法はありますか。 インラインビューを使用しようとしましたが、できませんでした。 例:

refCursorはREF CURSORです。

手順GETCOMPANYLIST(CompanyCursor OUT refCursor)として開くOpen CompanyCursor SELECT COMPANYID、COMPANYNAMEについて(SELECT * FROM ORDERS WHERE CompanyID = CompanyID)の場合OrderRecords WHERE IsActive = 'T'; END GETCOMPANYLIST;

これはうまくいきませんが、私がここでやろうとしていることを実行する方法はありますか? 現在のところ、データベースへの1回の呼び出しで会社のリストを取得し、次にすべてのレコードをループ処理して個々の呼び出しを行って各注文のリストを取得する必要があります。

[有効な回答を追加しました - これまで実際に質問に答えている回答はありませんでした]

3 Answer


1


あなたが言うようにタイプが `Object`である間、.Netはもっと強くタイプされた値を使おうとします。 列には関連付けられたDataTypeプロパティがあり、これは少数のタイプのセットのみをサポートします。 完全なリストについては、このリンクを参照してください。http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx

データテーブルは内部的にはxmlなので、おそらくそのようなテーブルを構築することができますが、.Netはそれをデータベースに渡しません。 代わりに、DataSetの使い方を調べてください。 DataSetは単なるDataTableのコレクションですが、必要に応じて関係をマッピングできるスキーマもサポートします。


1


私は一度同じようなことをする必要があり、結果セットごとに1つずつ、OUT REF CURSORとしてそれらをすべて返すことになった。 必要に応じてこれをDataSetにロードできます。


0


私はこの質問を比較的昔(数ヶ月前)にして、それからうまくいかなかったときに、複数のデータテーブルを送信し、必要な方法でアプリケーション側でそれらを「再組み立て」しました。処理されます。 しかし、私はこの質問に対する答えを見つけ、それをここのコミュニティと共有しなければなりませんでした。 バージョン9以降のOracleのXMLサポートは非​​常に素晴らしいです。特にDBMS_XMLQueryパッケージを使用すると、.NETでアプリケーション側で簡単に変換できるXMLデータセットとしてselect文を解析して送信することで、上記の問題を解決できます。楽に。 これは私が最近書いたテストストアドプロシージャのサンプルコードです。

SELECT COMPANYID、COMPANYNAME、DBMS_XMLQuery.GetXML( 'SELECT * FROM ORDERS WHERE CompanyID =' || COMPANY.COMPANYID)会社からのOrderRecords下位(COMPANYNAME)LIKE '%shawn%';

これは、次のようなものを返します(OrderRecordsを文字列としてプルしてDataTableに変換するだけです)。

会社ID |会社名| OrderRecords ------------------------------------------------- -------------------------- 1051 |ショーンズカンパニー返されるXML文字列、以下にリストされている


500020テストノート500021テストノート2 500280ノートテスト

DBMS_XMLQueryパッケージには、この1つの非常に優れた機能以外にもたくさんの機能があります。 確かにチェックする価値があります。