请教怎样将表字段横向列出来,并找出差异?

wina 2007-08-06 11:28:41
如下面有个表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

做这个的主要目的是我想比较两个系统中两个表字段的差异,因为现在环境中两个表结构不一致或者字段名称不一样;具体统计出来方便一些;大概几百个表吧!

不知大家有没有遇到过这种情况,如果有脚本的话,能不能共享一下;
...全文
419 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
别忘了表名要用''引起来
  • 打赏
  • 举报
回复
创建一个函数:
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得到你想得到的表列了

yanxw_227 2007-08-09
  • 打赏
  • 举报
回复
楼主的意思是,都列出来的话,哪些一样哪些不一样就很清楚能看见了~
不知道理解的对不?
yolanda_freezing 2007-08-09
  • 打赏
  • 举报
回复
樓上最直接,#17呵呵
jacobrong79 2007-08-09
  • 打赏
  • 举报
回复
pl/sql developer-->tools-->Compare User Objects...
hongqi162 2007-08-06
  • 打赏
  • 举报
回复
--函数
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
临摹 2007-08-06
  • 打赏
  • 举报
回复
只是想看两个表字段一样不一样吗?
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表结构就不一样.
ATGC 2007-08-06
  • 打赏
  • 举报
回复
只要查询一下USER_TAB_COLUMNS即可
bjt_ 2007-08-06
  • 打赏
  • 举报
回复
比较字段差别并不需要把字段横向列出来,直接用关联或minus进行比较即可

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧