我正在编写一个小应用程序,用户可以输入SQL并获得结果。 我注意到我的应用程序无法处理XMLTYPE列(我正在使用ADO)。 是否可以“询问”oracle参与SQL的select部分的字段是什么,所以我可以动态地用“getclobval()”函数替换XMLTYPE字段?
答案 0 :(得分: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