행위

"MS MIG 전환솔루션"의 두 판 사이의 차이

DB CAFE

(새 문서: === 테이블명 변경 적용 프로시져 === <source lang=sql> CREATE OR REPLACE PROCEDURE MIGCOMMON.SP_TOBE_TAB_REFRESH /* MIG_TOBE_TABLE 갱신 프로시져 BY CYKIM (2020/11/03)...)
 
(MS MIG 전환 솔루션)
 
(같은 사용자의 중간 판 31개는 보이지 않습니다)
1번째 줄: 1번째 줄:
=== 테이블명 변경 적용 프로시져 ===
+
== MS MIG 전환 솔루션 ==
<source lang=sql>
 
CREATE OR REPLACE PROCEDURE MIGCOMMON.SP_TOBE_TAB_REFRESH
 
/* MIG_TOBE_TABLE 갱신 프로시져 BY CYKIM (2020/11/03)
 
*  -- 0. 사용법
 
* EXEC SP_TOBE_TAB_REFRESH();
 
*
 
* -- 1.오너 전체 테이블 리플레쉬 
 
* EXEC SP_TOBE_TAB_REFRESH(IN_OWNER=>'TBA', IN_TABLE_NAME=>NULL);
 
*
 
* -- 2.오너별, 개별테이블  리플레쉬
 
* EXEC SP_TOBE_TAB_REFRESH(IN_OWNER=>'오너명', IN_TABLE_NAME=>'TABLE명');
 
*
 
*/
 
(
 
    IN_OWNER IN VARCHAR2 DEFAULT NULL,
 
    IN_TABLE_NAME IN VARCHAR2 DEFAULT NULL
 
)
 
  
AUTHID CURRENT_USER
+
'''크리에이터 요청으로 자세한건 안보여줌.'''
  
IS
+
[[category:Oracle]]
 
 
    CURSOR REFRESH_OBJECT IS
 
        SELECT A.OWNER,A.TABLE_NAME
 
          FROM ALL_TABLES A               
 
        WHERE A.OWNER = IN_OWNER
 
          AND A.TABLE_NAME=IN_TABLE_NAME 
 
    ; 
 
 
 
    V_D_SQL  VARCHAR2(200);                                                 
 
    V_SQL  VARCHAR2(32767);
 
   
 
    V_OWNER  VARCHAR2(100);
 
    V_TABLE_NAME  VARCHAR2(100);
 
 
 
   
 
    V_MSG      long;   
 
   
 
BEGIN
 
 
 
    IF IN_OWNER IS NULL THEN
 
        DBMS_OUTPUT.ENABLE(100);
 
        DBMS_OUTPUT.PUT_LINE('usage: ');
 
        DBMS_OUTPUT.PUT_LINE('SP_TOBE_TAB_REFRESH(IN_OWNER    => '''' , IN_TABLE_NAME  => ''''); ');
 
                 
 
        RETURN;
 
    END IF;
 
   
 
    DBMS_OUTPUT.ENABLE(32767);
 
    IF V_TABLE_NAME IS NOT NULL THEN
 
        FOR V_ROW IN REFRESH_OBJECT
 
        LOOP 
 
 
 
            BEGIN
 
                   
 
                V_OWNER:= V_ROW.OWNER;
 
                V_TABLE_NAME:= V_ROW.TABLE_NAME;
 
                DBMS_OUTPUT.ENABLE(32767);
 
             
 
              IF V_TABLE_NAME IS NOT NULL THEN
 
                -- OWNER.개별 테이블 갱신 처리 
 
                V_D_SQL :='DELETE FROM MIGCOMMON.TB_MIG_COL_DIC_TOBE WHERE OWNER='''||V_ROW.OWNER||''' AND TABLE_NAME='''||V_ROW.TABLE_NAME||'''';
 
                  V_SQL :='INSERT INTO MIGCOMMON.TB_MIG_COL_DIC_TOBE (OWNER,TABLE_NAME,LOGI_NAME,COLUMN_ID,COLUMN_NAME,ATTR_NAME,DATA_TYPE,CONV_COL_LEN,DATA_LENGTH,DATA_PRECISION,DATA_SCALE,NULLABLE,KEY,COL_CRT_TYPE)
 
                          SELECT OWNER,TABLE_NAME,LOGI_NAME,COLUMN_ID,COLUMN_NAME,ATTR_NAME,DATA_TYPE,NULL AS CONV_COL_LEN,NULL AS DATA_LENGTH,NULL AS DATA_PRECISION,NULL AS DATA_SCALE,NULL AS NULLABLE,NULL AS KEY,''가상컬럼''    AS COL_CRT_TYPE
 
                            FROM TB_MIG_COL_DIC_TOBE_DUMMY
 
                            WHERE OWNER = '''||V_ROW.OWNER||'''
 
                              AND TABLE_NAME = '''||V_ROW.TABLE_NAME||'''
 
                            UNION ALL
 
                            SELECT TB.OWNER,
 
                                  TB.TABLE_NAME,
 
                                  SUBSTR (LOGI.COMMENTS, 1, 40)    AS LOGI_NAME,
 
                                  COL.COLUMN_ID,
 
                                  COL.COLUMN_NAME,
 
                                  SUBSTR (ATTR.COMMENTS, 1, 40)    AS ATTR_NAME,
 
                                  COL.DATA_TYPE,
 
                                  CASE
 
                                      WHEN COL.DATA_TYPE IN (''VARCHAR2'', ''CHAR'')
 
                                      THEN
 
                                          TO_CHAR (COL.DATA_LENGTH)
 
                                      WHEN    COL.DATA_TYPE IN (''NUMBER'')
 
                                            AND COL.DATA_PRECISION IS NOT NULL
 
                                      THEN
 
                                              TO_CHAR (COL.DATA_PRECISION)
 
                                          || DECODE (COL.DATA_SCALE, ''0'', '''', '''','''' || COL.DATA_SCALE)
 
                                      ELSE
 
                                          ''''
 
                                  END                              AS CONV_COL_LEN,
 
                                  COL.DATA_LENGTH,
 
                                  COL.DATA_PRECISION,
 
                                  COL.DATA_SCALE,
 
                                  COL.NULLABLE,
 
                                  CON.KEY,
 
                                  ''물리컬럼''                  AS COL_CRT_TYPE
 
                              FROM MIGCOMMON.ALL_TABLES  TB
 
                                  INNER JOIN MIGCOMMON.ALL_TAB_COLUMNS COL
 
                                      ON TB.OWNER = COL.OWNER AND TB.TABLE_NAME = COL.TABLE_NAME
 
                                  LEFT OUTER JOIN
 
                                  (  SELECT CCL.OWNER,
 
                                            CCL.TABLE_NAME,
 
                                            COLUMN_NAME,
 
                                            CASE
 
                                                WHEN    SUM (DECODE (CONSTRAINT_TYPE, ''P'', 1, 0)) > 0
 
                                                      AND SUM (DECODE (CONSTRAINT_TYPE, ''R'', 1, 0)) > 0
 
                                                THEN
 
                                                    ''PK,FK''
 
                                                WHEN SUM (DECODE (CONSTRAINT_TYPE, ''P'', 1, 0)) > 0
 
                                                THEN
 
                                                    ''PK''
 
                                                WHEN SUM (DECODE (CONSTRAINT_TYPE, ''R'', 1, 0)) > 0
 
                                                THEN
 
                                                    ''FK''
 
                                                ELSE
 
                                                    ''''
 
                                            END    AS KEY
 
                                        FROM MIGCOMMON.ALL_CONS_COLUMNS CCL,
 
                                            MIGCOMMON.ALL_CONSTRAINTS CNS
 
                                      WHERE CCL.CONSTRAINT_NAME = CNS.CONSTRAINT_NAME
 
                                    GROUP BY CCL.OWNER, CCL.TABLE_NAME, COLUMN_NAME) CON
 
                                      ON    TB.OWNER = CON.OWNER
 
                                          AND TB.TABLE_NAME = CON.TABLE_NAME
 
                                          AND COL.COLUMN_NAME = CON.COLUMN_NAME
 
                                  LEFT OUTER JOIN MIGCOMMON.ALL_COL_COMMENTS ATTR
 
                                      ON    ATTR.OWNER = TB.OWNER
 
                                          AND ATTR.TABLE_NAME = TB.TABLE_NAME
 
                                          AND ATTR.COLUMN_NAME = COL.COLUMN_NAME
 
                                  LEFT OUTER JOIN MIGCOMMON.ALL_TAB_COMMENTS LOGI
 
                                      ON LOGI.OWNER = TB.OWNER AND LOGI.TABLE_NAME = TB.TABLE_NAME
 
                            WHERE    (TB.OWNER IN
 
                                            (SELECT DB_OWNER_NM
 
                                              FROM (SELECT DB_OWNER_NM
 
                                                      FROM MIGCOMMON.TB_MIG_CONFIG_DBOWNER
 
                                                      WHERE DB_TARGET_CD = ''2''
 
                                                    UNION ALL
 
                                                    SELECT ''MIGCOMMON'' AS DB_OWNER_NM FROM DUAL
 
                                                    UNION ALL
 
                                                    SELECT ''MIGBASEDATA'' AS DB_OWNER_NM FROM DUAL)))
 
                                  AND TB.OWNER = '''||V_ROW.OWNER||'''                           
 
                                  AND TB.TABLE_NAME = '''||V_ROW.TABLE_NAME||'''';
 
--                  DBMS_OUTPUT.PUT_LINE('DEL_SQL:'||V_D_SQL);
 
                  EXECUTE IMMEDIATE V_D_SQL;         
 
--                  DBMS_OUTPUT.PUT_LINE('INS_SQL:'||V_SQL);
 
                  EXECUTE IMMEDIATE V_SQL;
 
                     
 
                END IF;
 
            EXCEPTION
 
                WHEN OTHERS THEN
 
                  V_MSG := 'ERROR : ['|| to_char(SQLCODE) ||']'|| substr(SQLERRM,1,500);
 
                  DBMS_OUTPUT.PUT_LINE('ERR_SQL:'||V_SQL);
 
                   
 
            END;
 
        END LOOP;
 
               
 
    ELSE
 
        -- 해당 오너의 전체 테이블 REFRESH
 
        V_D_SQL :='DELETE FROM MIGCOMMON.TB_MIG_COL_DIC_TOBE WHERE OWNER='''||IN_OWNER||'''';
 
          V_SQL :='INSERT INTO MIGCOMMON.TB_MIG_COL_DIC_TOBE (OWNER,TABLE_NAME,LOGI_NAME,COLUMN_ID,COLUMN_NAME,ATTR_NAME,DATA_TYPE,CONV_COL_LEN,DATA_LENGTH,DATA_PRECISION,DATA_SCALE,NULLABLE,KEY,COL_CRT_TYPE)
 
                  SELECT OWNER,TABLE_NAME,LOGI_NAME,COLUMN_ID,COLUMN_NAME,ATTR_NAME,DATA_TYPE,NULL AS CONV_COL_LEN,NULL AS DATA_LENGTH,NULL AS DATA_PRECISION,NULL AS DATA_SCALE,NULL AS NULLABLE,NULL AS KEY,''가상컬럼''    AS COL_CRT_TYPE
 
                    FROM TB_MIG_COL_DIC_TOBE_DUMMY
 
                    WHERE OWNER = '''||IN_OWNER||'''                           
 
                    UNION ALL
 
                    SELECT TB.OWNER,
 
                          TB.TABLE_NAME,
 
                          SUBSTR (LOGI.COMMENTS, 1, 40)    AS LOGI_NAME,
 
                          COL.COLUMN_ID,
 
                          COL.COLUMN_NAME,
 
                          SUBSTR (ATTR.COMMENTS, 1, 40)    AS ATTR_NAME,
 
                          COL.DATA_TYPE,
 
                          CASE
 
                              WHEN COL.DATA_TYPE IN (''VARCHAR2'', ''CHAR'')
 
                              THEN
 
                                  TO_CHAR (COL.DATA_LENGTH)
 
                              WHEN    COL.DATA_TYPE IN (''NUMBER'')
 
                                    AND COL.DATA_PRECISION IS NOT NULL
 
                              THEN
 
                                      TO_CHAR (COL.DATA_PRECISION)
 
                                  || DECODE (COL.DATA_SCALE, ''0'', '''', '''','''' || COL.DATA_SCALE)
 
                              ELSE
 
                                  ''''
 
                          END                              AS CONV_COL_LEN,
 
                          COL.DATA_LENGTH,
 
                          COL.DATA_PRECISION,
 
                          COL.DATA_SCALE,
 
                          COL.NULLABLE,
 
                          CON.KEY,
 
                          ''물리컬럼''                  AS COL_CRT_TYPE
 
                      FROM MIGCOMMON.ALL_TABLES  TB
 
                          INNER JOIN MIGCOMMON.ALL_TAB_COLUMNS COL
 
                              ON TB.OWNER = COL.OWNER AND TB.TABLE_NAME = COL.TABLE_NAME
 
                          LEFT OUTER JOIN
 
                          (  SELECT CCL.OWNER,
 
                                    CCL.TABLE_NAME,
 
                                    COLUMN_NAME,
 
                                    CASE
 
                                        WHEN    SUM (DECODE (CONSTRAINT_TYPE, ''P'', 1, 0)) > 0
 
                                              AND SUM (DECODE (CONSTRAINT_TYPE, ''R'', 1, 0)) > 0
 
                                        THEN
 
                                            ''PK,FK''
 
                                        WHEN SUM (DECODE (CONSTRAINT_TYPE, ''P'', 1, 0)) > 0
 
                                        THEN
 
                                            ''PK''
 
                                        WHEN SUM (DECODE (CONSTRAINT_TYPE, ''R'', 1, 0)) > 0
 
                                        THEN
 
                                            ''FK''
 
                                        ELSE
 
                                            ''''
 
                                    END    AS KEY
 
                                FROM MIGCOMMON.ALL_CONS_COLUMNS CCL,
 
                                    MIGCOMMON.ALL_CONSTRAINTS CNS
 
                              WHERE CCL.CONSTRAINT_NAME = CNS.CONSTRAINT_NAME
 
                            GROUP BY CCL.OWNER, CCL.TABLE_NAME, COLUMN_NAME) CON
 
                              ON    TB.OWNER = CON.OWNER
 
                                  AND TB.TABLE_NAME = CON.TABLE_NAME
 
                                  AND COL.COLUMN_NAME = CON.COLUMN_NAME
 
                          LEFT OUTER JOIN MIGCOMMON.ALL_COL_COMMENTS ATTR
 
                              ON    ATTR.OWNER = TB.OWNER
 
                                  AND ATTR.TABLE_NAME = TB.TABLE_NAME
 
                                  AND ATTR.COLUMN_NAME = COL.COLUMN_NAME
 
                          LEFT OUTER JOIN MIGCOMMON.ALL_TAB_COMMENTS LOGI
 
                              ON LOGI.OWNER = TB.OWNER AND LOGI.TABLE_NAME = TB.TABLE_NAME
 
                    WHERE    (TB.OWNER IN
 
                                    (SELECT DB_OWNER_NM
 
                                      FROM (SELECT DB_OWNER_NM
 
                                              FROM MIGCOMMON.TB_MIG_CONFIG_DBOWNER
 
                                              WHERE DB_TARGET_CD = ''2''
 
                                            UNION ALL
 
                                            SELECT ''MIGCOMMON'' AS DB_OWNER_NM FROM DUAL
 
                                            UNION ALL
 
                                            SELECT ''MIGBASEDATA'' AS DB_OWNER_NM FROM DUAL)))
 
                          AND TB.OWNER = '''||IN_OWNER||'''';         
 
                                       
 
--          DBMS_OUTPUT.PUT_LINE('DEL_SQL:'||V_D_SQL);
 
          EXECUTE IMMEDIATE V_D_SQL;         
 
--          DBMS_OUTPUT.PUT_LINE('INS_SQL:'||V_SQL);
 
          EXECUTE IMMEDIATE V_SQL;
 
         
 
          -- LOG 기록
 
--          INSERT INTO ZB_MGR_TAB_REFRESH_LOG
 
--                      (OWNER , TABLE_NAME)
 
--              VALUES (V_ROW.OWNER,V_ROW.TABLE_NAME);
 
      COMMIT;
 
                               
 
    END IF;
 
 
 
EXCEPTION
 
    WHEN OTHERS THEN
 
        DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' || SQLERRM);
 
 
 
END;
 
/
 
</source>
 
=== 테이블명 변경 적용 프로시져 ===
 
<source lang=sql>
 
CREATE OR REPLACE PROCEDURE MIGCOMMON.SP_TOBE_TAB_RENAME
 
/* MIG_TOBE_TABLE 갱신 프로시져 BY CYKIM (2020/11/03)
 
*  -- 0. 사용법
 
* EXEC SP_TOBE_TAB_RENAME('오너명','OLD_TABLE명','NEW_TABLE명'));
 
*
 
* -- 1.오너, 테이블  RENAME
 
* EXEC SP_TOBE_TAB_RENAME(IN_OWNER=>'오너명', IN_OLD_TABLE=>'OLD_TABLE명', IN_NEW_TABLE=>'NEW_TABLE명');
 
*
 
*/
 
(
 
    IN_OWNER IN VARCHAR2 DEFAULT NULL,
 
    IN_OLD_TABLE IN VARCHAR2 DEFAULT NULL,
 
    IN_NEW_TABLE IN VARCHAR2 DEFAULT NULL   
 
)
 
 
 
--AUTHID CURRENT_USER
 
 
 
IS
 
 
 
PRAGMA AUTONOMOUS_TRANSACTION;
 
 
 
--    CURSOR RENAME_OBJECT IS
 
--        SELECT A.OWNER,A.TABLE_NAME
 
--          FROM ALL_TABLES A               
 
--        WHERE A.OWNER = IN_OWNER
 
--          AND A.TABLE_NAME=IN_OLD_TABLE 
 
--    ; 
 
 
 
    V_1_SQL  VARCHAR2(2000);                                                 
 
    V_2_SQL  VARCHAR2(2000);
 
    V_FK1_SQL1 VARCHAR2(2000);
 
    V_FK1_SQL2 VARCHAR2(2000);
 
    V_FK1_SQL3 VARCHAR2(2000);       
 
    V_FK2_SQL1 VARCHAR2(2000);
 
    V_FK2_SQL2 VARCHAR2(2000);
 
    V_FK2_SQL3 VARCHAR2(2000);       
 
   
 
--    V_OWNER  VARCHAR2(100);
 
--    V_TABLE_NAME  VARCHAR2(100);
 
   
 
    V_MSG      long;   
 
   
 
BEGIN
 
 
 
    IF IN_OWNER IS NULL THEN
 
        DBMS_OUTPUT.ENABLE(200);
 
        DBMS_OUTPUT.PUT_LINE('usage: ');
 
        DBMS_OUTPUT.PUT_LINE('SP_TOBE_TAB_RENAME(IN_OWNER    => '''' , IN_OLD_TABLE  => '''', IN_NEW_TABLE  => ''''); ');
 
                 
 
        RETURN;
 
    END IF;
 
   
 
    DBMS_OUTPUT.ENABLE(32767);
 
   
 
    BEGIN
 
 
 
--        V_OWNER:= IN_OWNER;
 
--        V_TABLE_NAME:= IN_OLD_TABLE;
 
--        V_TABLE_NAME2:= IN_NEW_TABLE;
 
        DBMS_OUTPUT.ENABLE(32767);
 
 
 
        IF IN_NEW_TABLE IS NOT NULL THEN
 
       
 
            -- 1-1.F/K 비활성화
 
            V_FK1_SQL1 := 'ALTER TABLE TB_MIG_MAP_TBL_SUBSET DISABLE CONSTRAINTS FK_MIG_MAP_TBL_SUBSET_01';
 
            V_FK1_SQL2 := 'ALTER TABLE TB_MIG_MAP_TBL_USER DISABLE CONSTRAINTS FK_TB_MIG_MAP_TBL_USER_01';
 
            V_FK1_SQL3 := 'ALTER TABLE TB_MIG_MAP_TBL_SCDUL DISABLE CONSTRAINTS FK_TB_MIG_MAP_TBL_SCDUL_01';
 
           
 
            -- 1-2.F/K 활성화                       
 
            V_FK2_SQL1 := 'ALTER TABLE TB_MIG_MAP_TBL_SUBSET ENABLE CONSTRAINTS FK_MIG_MAP_TBL_SUBSET_01';
 
            V_FK2_SQL2 := 'ALTER TABLE TB_MIG_MAP_TBL_USER ENABLE CONSTRAINTS FK_TB_MIG_MAP_TBL_USER_01';
 
            V_FK2_SQL3 := 'ALTER TABLE TB_MIG_MAP_TBL_SCDUL ENABLE CONSTRAINTS FK_TB_MIG_MAP_TBL_SCDUL_01';   
 
 
 
            --                  DBMS_OUTPUT.PUT_LINE('V_FK1_SQL:'||V_FK1_SQL);
 
            EXECUTE IMMEDIATE V_FK1_SQL1;     
 
            EXECUTE IMMEDIATE V_FK1_SQL2;           
 
            EXECUTE IMMEDIATE V_FK1_SQL3;           
 
           
 
            -- 매핑테이블 UPDATE 처리 
 
            UPDATE TB_MIG_MAP_TBL A SET TOBE_TBL_NM=IN_NEW_TABLE  WHERE TOBE_TBL_NM=IN_OLD_TABLE;
 
           
 
            -- 매핑테이블 이력 UPDATE 처리
 
            UPDATE TB_MIG_MAP_TBL_HST A SET TOBE_TBL_NM=IN_NEW_TABLE  WHERE TOBE_TBL_NM=IN_OLD_TABLE;
 
 
 
            -- 매핑컬럼 UPDATE 처리
 
            UPDATE TB_MIG_MAP_COL A SET A.TOBE_TBL_NM=IN_NEW_TABLE WHERE A.TOBE_TBL_NM=IN_OLD_TABLE;
 
 
 
            -- 매핑테이블 이력  UPDATE 처리
 
            UPDATE TB_MIG_MAP_COL_HST A SET A.TOBE_TBL_NM=IN_NEW_TABLE WHERE A.TOBE_TBL_NM=IN_OLD_TABLE;
 
 
 
            -- 매핑테이블 상세 매핑정보  UPDATE 처리
 
            UPDATE TB_MIG_MAP_TBL_SUBSET A SET TOBE_TBL_NM=IN_NEW_TABLE WHERE TOBE_TBL_NM=IN_OLD_TABLE;
 
           
 
            -- 매핑테이블 상세 매핑정보 이력  UPDATE 처리
 
            UPDATE TB_MIG_MAP_TBL_SUBSET_HST A SET TOBE_TBL_NM=IN_NEW_TABLE WHERE TOBE_TBL_NM=IN_OLD_TABLE;
 
             
 
            -- 매핑 테이블 담당자 UPDATE
 
            UPDATE TB_MIG_MAP_TBL_USER A SET TOBE_TBL_NM=IN_NEW_TABLE WHERE TOBE_TBL_NM=IN_OLD_TABLE;
 
           
 
            -- 매핑 테이블 담당자 스케줄 UPDATE 
 
            UPDATE TB_MIG_MAP_TBL_SCDUL A SET TOBE_TBL_NM=IN_NEW_TABLE WHERE TOBE_TBL_NM=IN_OLD_TABLE;
 
 
 
            -- F/K ENABLE 
 
            --                  DBMS_OUTPUT.PUT_LINE('INS_SQL:'||V_FK1_SQL);
 
            COMMIT;
 
           
 
            EXECUTE IMMEDIATE V_FK2_SQL1;
 
            EXECUTE IMMEDIATE V_FK2_SQL2;
 
            EXECUTE IMMEDIATE V_FK2_SQL3;                       
 
               
 
           
 
           
 
        END IF;
 
       
 
        EXCEPTION
 
            WHEN OTHERS THEN
 
            V_MSG := 'ERROR : ['|| to_char(SQLCODE) ||']'|| substr(SQLERRM,1,500);
 
--            DBMS_OUTPUT.PUT_LINE('ERR_SQL:'||V_SQL);
 
 
 
              COMMIT;
 
    END;
 
       
 
EXCEPTION
 
    WHEN OTHERS THEN
 
        DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' || SQLERRM);
 
 
 
END;
 
/
 
</source>
 

2023년 6월 21일 (수) 01:36 기준 최신판

thumb_up 추천메뉴 바로가기


MS MIG 전환 솔루션[편집]

크리에이터 요청으로 자세한건 안보여줌.