3

我正在编写一个用户可以输入 SQL 并获得结果的小应用程序。我注意到我的应用程序无法处理 XMLTYPE 列(我正在使用 ADO)。是否可以“询问”oracle 哪些字段参与了 SQL 的选择部分,所以我可以用“getclobval()”函数即时替换 XMLTYPE 字段?

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 回答