3

ユーザーが SQL を入力して結果を取得できる小さなアプリケーションを作成しています。アプリケーションで XMLTYPE 列を処理できないことに気付きました (ADO を使用しています)。SQL の選択部分に関与するフィールドをオラクルに「尋ねる」ことができるので、XMLTYPE フィールドをその場で「getclobval()」関数に置き換えることができますか?

4

1 に答える 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 に答える