如下面有个表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做这个的主要目的是我想比较两个系统中两个表字段的差异,因为现在环境中两个表结构不一致或者字段名称不一样;具体统计出来方便一些;大概几百个表吧!不知大家有没有遇到过这种情况,如果有脚本的话,能不能共享一下;
-- 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做这个的主要目的是我想比较两个系统中两个表字段的差异,因为现在环境中两个表结构不一致或者字段名称不一样;具体统计出来方便一些;大概几百个表吧!不知大家有没有遇到过这种情况,如果有脚本的话,能不能共享一下;
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表结构就不一样.
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
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得到你想得到的表列了