0

我有一个要求,我有以下形式的查询:

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 脚本。

4

1 回答 1

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;
/
于 2014-03-12T12:47:08.427 回答