반응형


뭐... 엑셀로 바로 출력하자고 하니...

깔아야 하는것들이 너무 많고 -_-...

버젼별로 차이도 존재하니.. 귀찮아... 하앍....

그래서 걍.. 수작업 -_-

별도로 설치할 필요는 없고

아래와 같이 실행하여 spool 된 파일을 excel에서 불러

다시 가공처리...

뭐... 짜는 것도 그리 어렵지 않지만 후후.... -_-...


 spool '/oracle/20110106_table.txt'

SET SERVEROUTPUT ON;
set serveroutput on size unlimited;

DECLARE

    L_TABLE_NAME VARCHAR2(2000);   
    M_NO NUMBER(9) := 1;
    L_NO NUMBER(9);
   
    CURSOR TABLE_DEF_LIST IS
    select A.TABLE_NAME, B.COMMENTS from USER_TABLES A, USER_TAB_COMMENTS B WHERE A.TABLE_NAME=B.TABLE_NAME
    order by A.TABLE_NAME;

    CURSOR TABLE_LIST IS
     SELECT
               B.COLUMN_NAME "컬럼ID",
               B.COMMENTS "컬럼명",
               A.DATA_TYPE || '(' || A.DATA_LENGTH || ')' "타입",
               A.DATA_LENGTH "길이",
               A.NULLABLE    "NULLABLE",              
               CASE WHEN TRIM(C.COLUMN_NAME) IS NOT NULL THEN 'Y' ELSE 'N' END "KEY",
               DATA_DEFAULT  "DF"
         FROM USER_TAB_COLS A, USER_COL_COMMENTS B, DBA_CONS_COLUMNS C
        WHERE A.TABLE_NAME  = B.TABLE_NAME
          AND A.COLUMN_NAME = B.COLUMN_NAME
          AND A.TABLE_NAME = C.TABLE_NAME(+)
          AND A.COLUMN_NAME = C.COLUMN_NAME(+)
          AND A.TABLE_NAME = L_TABLE_NAME;
         
    N_DEFAULT VARCHAR2(2000);   
   
    TABLE_LIST_CNT TABLE_LIST%ROWTYPE;
         
BEGIN

    BEGIN
   
        FOR TABLE_DEF_LIST_GET IN TABLE_DEF_LIST LOOP

            L_TABLE_NAME := TABLE_DEF_LIST_GET.TABLE_NAME;
           
            DBMS_OUTPUT.PUT_LINE('순번        : ' || M_NO);
            DBMS_OUTPUT.PUT_LINE('테이블 ID   : ' || TABLE_DEF_LIST_GET.TABLE_NAME);
            DBMS_OUTPUT.PUT_LINE('테이블 설명 : ' || TABLE_DEF_LIST_GET.COMMENTS);
           
            DBMS_OUTPUT.PUT_LINE('No.' || '***' || '컬럼ID' || '***' || '컬럼명' || '***' || '타입' || '***' || '길이' || '***' || 'NULL' || '***'|| 'KEY' || '***' ||'DEFAULT');
           
            M_NO := M_NO + 1;
            L_NO := 1;
           
            BEGIN
           
                FOR TABLE_LIST_CNT IN TABLE_LIST LOOP
               
                    --FETCH TABLE_LIST INTO TABLE_LIST_CNT; -- 한행 씩 읽기
                    EXIT WHEN TABLE_LIST%NOTFOUND;        -- 데이터가 발견되지 않으면 종료
                   
                    N_DEFAULT := '';
                    N_DEFAULT := TABLE_LIST_CNT.DF ;      -- LONG 데이터를 VARCHAR2로 변환
                   
                    DBMS_OUTPUT.PUT_LINE(L_NO || '***' || TABLE_LIST_CNT.컬럼ID || '***' || TABLE_LIST_CNT.컬럼명 || '***' || TABLE_LIST_CNT.타입 || '***' || TABLE_LIST_CNT.길이 || '***' || TABLE_LIST_CNT.NULLABLE || '***'|| TABLE_LIST_CNT.KEY || '***' ||N_DEFAULT);
                   
                    L_NO := L_NO + 1;
                END LOOP;
               
            EXCEPTION WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE('** 테이블 컬럼  내용 조회 오류 발생 ! ** ');   
            END;

            DBMS_OUTPUT.PUT_LINE(' '); 
            DBMS_OUTPUT.PUT_LINE('===========================================================');
            DBMS_OUTPUT.PUT_LINE(' ');
             
        END LOOP;
       
    EXCEPTION WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('** 테이블 조회 오류 발생 ! ** ');   
    END;
           
END;
/

spool off




반응형

+ Recent posts