獲取某張表的表結構

rainbowbridg發表於2007-01-11

今天看來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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章