如下面有个表synd_stmt,表结构如下
-- Create table
create table SYND_STMT
(
  TABLE_ID       NUMBER(4) not null,
  OPERATION_TYPE VARCHAR2(1) not null,
  SEQ            NUMBER(4) not null,
  STMT           VARCHAR2(2048) not null,
  NAME           VARCHAR2(50),
  SYND_DESC      VARCHAR2(100),
  OUT_ID         NUMBER(4)
)
tablespace idx_base
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    minextents 1
    maxextents unlimited
  );
请问用什么办法可以将表字段横向列出来;
结果如下:
  TABLE_ID,OPERATION_TYPE,SEQ,STMT,NAME,SYND_DESC,OUT_ID做这个的主要目的是我想比较两个系统中两个表字段的差异,因为现在环境中两个表结构不一致或者字段名称不一样;具体统计出来方便一些;大概几百个表吧!不知大家有没有遇到过这种情况,如果有脚本的话,能不能共享一下;

解决方案 »

  1.   

    只是想看两个表字段一样不一样吗?
    select column_name from all_tab_columns where table_name='A1' 
    minus 
    select column_name from all_tab_columns where table_name='A2';
    比较A1和A2表,如果能选出值,A1和A2表结构就不一样.
      

  2.   

    --函数
    create or replace function sum_string(v_sql varchar2)
    return varchar2
    as
    type cur_alldata is ref cursor;
    l_alldata cur_alldata;
    v_row varchar2(99);
    v_sum varchar2(3999);
    begin
    open l_alldata for v_sql;
    loop
    fetch l_alldata into v_row;
    exit when l_alldata%notfound;
    v_sum := v_sum||','||v_row;
    end loop;
    v_sum := substr(v_sum,2);
    close l_alldata;
    return v_sum;
    end;
    --执行查询
    select 
    sum_string('select column_name from user_tab_columns where table_name=''SYND_STMT''') 
    from dual;--查询结果
    TABLE_ID,OPERATION_TYPE,SEQ,STMT,NAME,SYND_DESC,OUT_ID
      

  3.   

    比较字段差别并不需要把字段横向列出来,直接用关联或minus进行比较即可
      

  4.   

    只要查询一下USER_TAB_COLUMNS即可
      

  5.   

    创建一个函数:
    create or replace function uf_GetTabCols
    (
       TableName_            varchar2
    )
    return varchar2
    is
       Count_                integer;
       Col_                  User_Tab_Cols.Column_Name%type;
       Cols_                 varchar2(4000) := '';
    begin   --校验表名是否有效,如果无效,返回空串
       select count(1) into Count_ from User_All_Tables where Table_Name = upper(TableName_);   if Count_ = 0 then
          return('');
       end if;   --返回列的组合串
       declare cursor cur is
          select Column_Name from User_Tab_Cols where Table_Name = upper(TableName_)
          order by Column_Id;
       begin
          open cur;
          loop
             fetch cur into Col_;
             exit when cur%NOTFOUND;
             Cols_ := Cols_||','||InitCap(Col_);
          end loop;
          close cur;
       end;   Cols_ := substr(Cols_, 2, length(Cols_) - 1);   return(Cols_);end uf_GetTabCols;然后就可以用 select uf_GetTabCols(Table_Name) as Cols from dual得到你想得到的表列了
      

  6.   

    pl/sql developer-->tools-->Compare User Objects...