我有一个要求,我在表格中有查询:
select tab1.col1 as column1, tab2.col1 as column1
from table1 tab1 inner join table2 tab2 on tab1.key1=tab2.key2
我想从中得到三件事:
table1|col1|column1
table2|col2|comumn2
如果可能,我想获取所选列的数据类型。
我知道这可以手动完成,但我有超过2000个选择查询,并且每个查询都提取超过100个字段。所以工作变得枯燥乏味。
关于如何实现自动化的任何想法。我有oracle SQL开发人员,如果能为我的工作服务,甚至可以编写UNIX shell脚本。
答案 0 :(得分:0)
您可以使用dbms_sql来获取结果列的描述..但它不会告诉您它来自哪个表。
但是使用dbms_sql 你可以打开光标 使用dbms_sql.parse()
解析sql语句然后,您可以使用DBMS_SQL.DESCRIBE_COLUMNS3获取生成的列定义
示例
set serveroutput on
DECLARE
c INTEGER;
COL_CNT NUMBER;
DESC_T SYS.DBMS_SQL.DESC_TAB3;
col_desc sys.dbms_sql.desc_rec3;
BEGIN
c := dbms_sql.open_cursor;
dbms_sql.parse(c,'select * from dual', dbms_sql.NATIVE);
DBMS_SQL.DESCRIBE_COLUMNS3(
C => C,
COL_CNT => COL_CNT,
DESC_T => DESC_T
);
DBMS_OUTPUT.PUT_LINE('COL_CNT = ' || COL_CNT);
FOR i IN DESC_T.FIRST .. DESC_T.LAST LOOP
col_desc := DESC_T(i);
DBMS_OUTPUT.PUT_line(col_desc.col_name);
END LOOP;
SYS.DBMS_SQL.CLOSE_CURSOR(c);
END;
/