获取某张表的表结构

今天看来yangtingkun的获取表结构,发现在10g里不能dbms_output.put_line不能把表结构全部显示出来(就是设置dbms_output.enable(10000都不能显示完)),觉得不很方便,我稍微改进了一下,可以获取表结构,并可以直接执行该sql文件,建立该表!

$cat gettabledefine.sh

#!/bin/bash
sqlplus $1/$2<set serveroutput on size 10000
spool tabledefine.tmp
execute P_TEST('$3');
spool off
exit
EOF
aparm="CREATE TABLE $1."
echo $aparm
awk 'NF>0' /home/oracle/dmp/tabledefine.tmp|grep -v "SQL>"|grep -v "PL/SQL procedure successfully completed"|sed -e 's/$aparm/{CREATE TABLE }/g'>/home/oracle/dmp/$3_define.sql

$1:schema的用户名 $2:密码 $3:表

下面是存储过程:
CREATE OR REPLACE PROCEDURE P_TEST(T_NAME IN VARCHAR2) AUTHID CURRENT_USER AS
de varchar2(4000);
a number;
b number;
c number;
BEGIN
FOR I IN (SELECT DBMS_METADATA.GET_DDL('TABLE', upper(T_NAME)) DEFINE FROM DUAL) LOOP
de:=replace(I.DEFINE,'"','');
END LOOP;
a:=trunc(length(de)/200)+1;
b:=1;
dbms_output.enable(10000);
while b <= a loop
c := Instr(SUBSTR( de,1, 200), ' ', -1, 1);
DBMS_OUTPUT.PUT_line(SUBSTR(de, 1, c));
de:=SUBSTR( de, c+1,length(de)-c);
b:=b+1;
end loop;
DBMS_OUTPUT.PUT_line(';');
-- gawk 'NF>0' 1.txt >2.txt 去掉文本里面的空行
END;
/

当然也可以再改进一下来获取某个用户下的所有表的结构!这里就不再深入了!!

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7916042/viewspace-889696/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7916042/viewspace-889696/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值