oracle create 스크립트 추출.......

김철민 4 16,685 2006.11.22 14:57
안녕하세요 해야할 강좌는 안올리고 게시판에 쓸때없는것만 올리고 뻐팅기고 있는 철미니 입니다.
ㅠㅠ....

지금 플젝 하는곳에서 DB에 대한 테이블이나 프로시져 펑션 기타 등등 에 대한것을 Local 로 올릴 필요가 있어서 나쁜머리 돌려가며 맹글고 있는데 .....혹시나 도움이 되실까해서 올립니다.

특정 db 에 있는 table 등 을 생성 하려면 1개씩 Toad 나 sqlgate 등을 통하여 테이블 생성 스크립트 가지고 하나하나 생성을 하는데....이거 1000개 넘어가면 장난이 아니죠...

이럴때 필요한 스크립트입니다.



이럴때 꼭 알아야 하는것이 DB사전입니다. DBA 가 되실라면 이중에 많이 쓰는것은 외우고 있죠 아마...^^

//----------------------------------------

SELECT  TABLE_NAME Y
        ,0 X
        ,'CREATE TABLE ' ||RTRIM(TABLE_NAME) ||'('
  FROM  DBA_TABLES
 WHERE  OWNER = UPPER('사용자명')
UNION
SELECT  TC.TABLE_NAME Y
        ,COLUMN_ID X
        ,RTRIM(DECODE(COLUMN_ID,1,NULL,','))
        || RTRIM(COLUMN_NAME)|| ' '
        || RTRIM(DATA_TYPE)
        || RTRIM(DECODE(DATA_TYPE,'DATE',NULL,'LONG',NULL,'NUMBER',DECODE(TO_CHAR(DATA_PRECISION),NULL,NULL,'('),'('))
        || RTRIM(DECODE(DATA_TYPE,'DATE',NULL,'CHAR',DATA_LENGTH,'VARCHAR2',DATA_LENGTH,'NUMBER',DECODE(TO_CHAR(DATA_PRECISION),NULL,NULL,TO_CHAR(DATA_PRECISION)
        || ','
        || TO_CHAR(DATA_SCALE)),'LONG',NULL,'******ERROR'))
        || RTRIM(DECODE(DATA_TYPE,'DATE',NULL,'LONG',NULL,'NUMBER',DECODE(TO_CHAR(DATA_PRECISION),NULL,NULL,')'),')'))
        || ' '
        || RTRIM(DECODE(NULLABLE,'N','NOT NULL',NULL))
  FROM  DBA_TAB_COLUMNS TC
        ,DBA_OBJECTS O
 WHERE  O.OWNER = TC.OWNER
  AND  O.OBJECT_NAME = TC.TABLE_NAME
  AND O.OBJECT_TYPE = 'TABLE'
  AND O.OWNER = UPPER('사용자명')
UNION
SELECT TABLE_NAME Y
      ,999999 X
      ,')' || CHR(10)
            -- ||' STORAGE(' || CHR(10)
            -- ||' INITIAL ' || INITIAL_EXTENT || CHR(10)
            -- ||' NEXT ' || NEXT_EXTENT || CHR(10)
            -- ||' MINEXTENTS ' || MIN_EXTENTS || CHR(10)
            -- ||' MAXEXTENTS ' || MAX_EXTENTS || CHR(10)
            -- ||' PCTINCREASE '|| PCT_INCREASE || ')' ||CHR(10)
            -- ||' INITRANS ' || INI_TRANS || CHR(10)
            -- ||' MAXTRANS ' || MAX_TRANS || CHR(10)
            -- ||' PCTFREE ' || PCT_FREE || CHR(10)
            -- ||' PCTUSED ' || PCT_USED || CHR(10)
            -- ||' PARALLEL (DEGREE ' || DEGREE || ') ' || CHR(10)
            -- ||' TABLESPACE ' || RTRIM(TABLESPACE_NAME) ||CHR(10)
            ||';'||CHR(10)||CHR(10)
  FROM  DBA_TABLES
 WHERE  OWNER = UPPER('사용자명')
 ORDER  BY 1,2
;

/******************************************************************************* 사용예

/**
 * 테이블 추출 Query 
 **/
SELECT  TABLE_NAME Y
        ,0 X
        ,'CREATE TABLE ' ||RTRIM(TABLE_NAME) ||'('
  FROM  DBA_TABLES
 WHERE  OWNER = UPPER('$ownerName')
UNION
SELECT  TC.TABLE_NAME Y
        ,COLUMN_ID X
        ,RTRIM(DECODE(COLUMN_ID,1,NULL,','))
        || RTRIM(COLUMN_NAME)|| ' '
        || RTRIM(DATA_TYPE)
        || RTRIM(DECODE(DATA_TYPE,'DATE',NULL,'LONG',NULL,'NUMBER',DECODE(TO_CHAR(DATA_PRECISION),NULL,NULL,'('),'('))
        || RTRIM(DECODE(DATA_TYPE,'DATE',NULL,'CHAR',DATA_LENGTH,'VARCHAR2',DATA_LENGTH,'NUMBER',DECODE(TO_CHAR(DATA_PRECISION),NULL,NULL,TO_CHAR(DATA_PRECISION)
        || ','
        || TO_CHAR(DATA_SCALE)),'LONG',NULL,'******ERROR'))
        || RTRIM(DECODE(DATA_TYPE,'DATE',NULL,'LONG',NULL,'NUMBER',DECODE(TO_CHAR(DATA_PRECISION),NULL,NULL,')'),')'))
        || ' '
        || RTRIM(DECODE(NULLABLE,'N','NOT NULL',NULL))
  FROM  DBA_TAB_COLUMNS TC
        ,DBA_OBJECTS O
 WHERE  O.OWNER = TC.OWNER
  AND  O.OBJECT_NAME = TC.TABLE_NAME
  AND O.OBJECT_TYPE = 'TABLE'
  AND O.OWNER = UPPER('$ownerName')
UNION
SELECT A.TABLE_NAME Y
      ,999999 X
      ,')' || CHR(10)
            -- ||' STORAGE(' || CHR(10)
            -- ||' INITIAL ' || INITIAL_EXTENT || CHR(10)
            -- ||' NEXT ' || NEXT_EXTENT || CHR(10)
            -- ||' MINEXTENTS ' || MIN_EXTENTS || CHR(10)
            -- ||' MAXEXTENTS ' || MAX_EXTENTS || CHR(10)
            -- ||' PCTINCREASE '|| PCT_INCREASE || ')' ||CHR(10)
            -- ||' INITRANS ' || INI_TRANS || CHR(10)
            -- ||' MAXTRANS ' || MAX_TRANS || CHR(10)
            -- ||' PCTFREE ' || PCT_FREE || CHR(10)
            -- ||' PCTUSED ' || PCT_USED || CHR(10)
            -- ||' PARALLEL (DEGREE ' || DEGREE || ') ' || CHR(10)
            -- ||' TABLESPACE ' || RTRIM(TABLESPACE_NAME) ||CHR(10)
            ||';'||CHR(10)||CHR(10)
            || 'COMMENT ON TABLE ' || A.TABLE_NAME || ' IS '||' '''|| B.COMMENTS ||''''
            ||';'||CHR(10)||CHR(10)
  FROM  DBA_TABLES A
    ,  DBA_TAB_COMMENTS B
 WHERE  A.TABLE_NAME    = B.TABLE_NAME
  AND  A.OWNER        = B.OWNER
  AND  A.OWNER        = UPPER('$ownerName')
 ORDER  BY 1,2
;


/**
 *  필드 주석 추출 
 **/
SELECT  'COMMENT ON COLUMN ' || 'korvans'||'.'||C.TABLE_NAME||'.'||COLUMN_NAME || ' IS ' || ''''|| COMMENTS ||'''' || ';'
  FROM  DBA_COL_COMMENTS C
 WHERE  OWNER  = UPPER('$ownerName');
 
/**
 * 프로시져 추출
 */
select  OWNER
    ,  NAME
    ,  TYPE
    ,  LINE
    ,  decode(line,1,'CREATE OR REPLACE '
        ||replace(text,'PACKAGE BODY ','PACKAGE BODY '
        ||owner
        ||'.'),text) AS PKG_SOURCE
from dba_source where type='PROCEDURE' and owner='$ownerName';

/**
 * 펑션 추출 
 **/
select  OWNER
    ,  NAME
    ,  TYPE
    ,  LINE
    ,  decode(line,1,'CREATE OR REPLACE '
        ||replace(text,'PACKAGE BODY ','PACKAGE BODY '
        ||owner
        ||'.'),text) AS PKG_SOURCE
from dba_source where type='FUNCTION' and owner='$ownerName';

/**
 * 트리거 추출 
 **/
select  OWNER
    ,  NAME
    ,  TYPE
    ,  LINE
    ,  decode(line,1,'CREATE OR REPLACE '
        ||replace(text,'PACKAGE BODY ','PACKAGE BODY '
        ||owner
        ||'.'),text) AS PKG_SOURCE
from dba_source where type='TRIGGER' and owner='$ownerName';


위에 사용한것도 DB 사전을 참고한것입니다. 첨부로 넣어두니 참고 하세요


Comments

이종철 2006.11.22 18:33
  Oracle Tip에도 올려주세요~
김철민 2006.11.23 13:08
  ㅠㅠ...자유게시판에서만 놀게 해주세요.....당분간만....네~~
펭도사 2007.01.10 23:37
  exp 받으면 끝아닌가욤?
김철민 2007.02.05 14:50
  ^^  평도사님 말씀이 맞는 경우도 있는데 어떤 특정한 곳은 exp 를 받을수 있는권한을 주지 않죠...물론 테이블 생성할수 있는 권한을 주는데 그것을 실제로 주지 않을수 있냐 라고 물으실수 있지만 제가 개발했던 대형 사이트들은 exp 같은 권한및 trans 와 같은 권한을 제약하고 시노님으로 처리한 사이트들이 있습니다. 이때 필요하겠죠...^^
번호 제목 글쓴이 날짜 조회
132 네이티브 크로스 플랫폼인 citirne으로 개발한 쇼핑몰 app 소스 공개합니다. 씨트린 2012.08.01 6526
131 강좌 내용의 이미지가 깨지네요. ^^ 댓글+1 심원보 2007.12.07 3771
130 (IE7)'창 닫으시겠습니까' 메시지 없애는 방법 댓글+3 이종철 2007.03.21 5455
129 [정보] IE Dev Toolbar 쓰기 댓글+1 김철민 2006.12.05 7087
열람중 oracle create 스크립트 추출....... 댓글+4 김철민 2006.11.22 16686
127 ㅠㅜ .... 지나친 게으름과 시차적응 댓글+4 김철민 2006.11.17 4379
126 [Tip]알면 힘이되는 Prototype.js 김철민 2006.11.09 5544
125 [Tip] 오라클 페이징 아주 간단한 팁입니다. 댓글+1 김철민 2006.11.07 5029
124 간단히 만들고 있는 게시판 ERD 와 일부 QUERY 김철민 2006.11.06 4086
123 REST 관련된 내용입니다. 이전 회사분이 적어놓으셨는데 허락없이 올립니다. 댓글+2 김철민 2006.11.02 2413
122 Window 에서 Unix 명령어 쓰기 댓글+3 김철민 2006.10.29 2480
121 SmartSQL*Plus 무료 오라클 관리툴 김기웅 2006.07.06 5117
120 PDF 프린트제한 풀기... 이종철 2006.06.05 2437
119 xp 팁 모음.... 정용길 2006.05.17 2800
118 XLST를 이용한 XML 출력 권홍재 2006.05.07 3105
117 특수키 모음 이종철 2006.05.03 2521
116 xp 최적화 방법 댓글+2 이종철 2006.05.02 2997
115 proc관련 질문입니다.. 김훈 2006.04.27 2827
114 ㅜ_ㅜ 여기는 검색이 없네요.. 댓글+1 으헥! 2005.12.26 2596
113 FTP로 Windows 2003 Server에서 Unix Server로 파일 보내기 방법 갈켜주세요 댓글+1 박정길 2005.12.15 2822
112 정말 좋은 사이트네요~ 댓글+2 천국의문 2005.11.28 2684
111 [CVS]로컬 소스를 처음 등록하기(Import) 이종철 2005.11.22 2851
110 Eclipse에서 디버깅 하기 이종철 2005.11.22 2377
109 ADO.NET을 이용한...(VB.NET) 이종철 2005.11.22 2177
108 날짜 쿼리-두 달 사이의 달 가져오기 이종철 2005.11.21 2199
107 [Hint]10g에서 유효하지 않는 힌트...... 이종철 2005.11.21 2201
106 [Hint]조인 방법 변경(HASH_SJ) 이종철 2005.11.21 2230
105 엑셀 파일 읽기(JSP) 댓글+2 이종철 2005.11.18 2580
104 [JUnit]TestCase 클래스 이종철 2005.11.15 2250
103 [ANT]JAR 테스크 소개 이종철 2005.11.12 2241
102 [Hint]조인 방법 변경(HASH_AJ) 이종철 2005.11.12 2367
101 pro-c 프로그램을 pc에서 사용하는 방법을 설명해주세요 2005.11.11 2214
100 [Hint]조인 방법 변경(LEADING) 이종철 2005.11.09 2274
99 [Hint]조인 방법 변경(DRIVING_SITE) 이종철 2005.11.08 2186
98 안녕하세요? 댓글+1 최세희 2005.11.07 3117
97 [힌트]강좌가 갱신 되었습니다.. 이종철 2005.11.06 2265
96 JUnit 강좌가 시작되었습니다!! 이종철 2005.11.06 2272
95 VB.NET 강좌 갱신 이종철 2005.11.05 2150
94 [Hint]조인 방법 변경(USE_NL) 이종철 2005.11.02 2263
93 Oracle Tip 갱신...[내용무] 이종철 2005.11.02 2181
92 Eclipse와 Ant 사용하기 이종철 2005.10.31 2122
91 자바 강좌 갱신! 이종철 2005.10.30 3256
90 안녕하세요. 댓글+1 최유선 2005.10.26 2613
89 그룹핑된 테이블outer join(10g) 이종철 2005.10.26 2667
88 [힌트]STAR_TRANSFORMATION에 관해... 이종철 2005.10.26 2634
87 예전에 가입했지만 첨으로 인사드려요.. 댓글+7 안형철 2005.10.04 2193
86 가입인사드립니다. 댓글+1 이석태 2005.09.20 2200
85 가입인사~~~~ 댓글+1 서동완 2005.09.12 2082
84 가입 했습니다. 댓글+1 김무중 2005.09.12 2142
83 가입했습니당.. *^^* 댓글+1 오은영 2005.09.12 3613