ユーザーが SQL を入力して結果を取得できる小さなアプリケーションを作成しています。アプリケーションで XMLTYPE 列を処理できないことに気付きました (ADO を使用しています)。SQL の選択部分に関与するフィールドをオラクルに「尋ねる」ことができるので、XMLTYPE フィールドをその場で「getclobval()」関数に置き換えることができますか?
1 に答える
5
*_TAB_COLS
ディクショナリ ビューをクエリすることで、列のデータ型を特定できます。ただし、これらはクエリではなくテーブルに基づいています。これを「オンザフライ」で行うのは非常に困難です。受信クエリを (コードで) 解析し、クエリの各列がどのテーブルに属しているかを特定し、次を発行する必要があるためです。
select data_type
from all_tab_cols
where table_name = :table
and column_name = :column;
次に、必要に応じてクエリを更新し、実行のために送信します。これは書くのが非常に難しく、遅くなる可能性が非常に高いです。
XMLTYPE を使用してテーブルのビューを作成し、ビューで変換を行い、基になるテーブルではなくビューに対してユーザーにクエリを実行させることで、必要なことを行うことができます。
create table tab (x xmltype, y integer);
create or replace view tab_v as
select t.x.getClobVal() x, y
from tab t;
select table_name, data_type from all_tab_cols
where column_name = 'X'
and table_name like 'TAB%';
TABLE_NAME DATA_TYPE
------------------------------ --------
TAB XMLTYPE
TAB_V CLOB
于 2012-12-02T11:27:57.947 に答える