如何获取参与SQL for Oracle的字段列表?

Ron*_*nen 3 sql oracle ado xmltype

我正在编写一个小应用程序,用户可以输入SQL并获得结果.我注意到我的应用程序无法处理XMLTYPE列(我正在使用ADO).是否可以"询问"oracle参与SQL的选择部分的字段是什么,所以我可以动态地用"getclobval()"函数替换XMLTYPE字段?

Chr*_*xon 5

您可以通过查询*_TAB_COLS字典视图来确定列的数据类型.但是,这些都基于表,而不是查询.要实现这一点,"动态"将是非常困难的,因为您需要解析传入的查询(在您的代码中),找出查询中每列所属的表并发出以下内容:

select data_type 
from   all_tab_cols
where  table_name = :table
and    column_name = :column;
Run Code Online (Sandbox Code Playgroud)

然后根据需要更新查询并提交以供执行.这将很难写,很可能很慢.

您可以通过使用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       
Run Code Online (Sandbox Code Playgroud)