'동적쿼리 처리'에 해당되는 글 1건

  1. [2009/06/18] [ORACLE] 동적쿼리 생성하여 INSERT

[ORACLE] 동적쿼리 생성하여 INSERT

[■DataBase/OO ORACLE OO]

CREATE OR REPLACE PROCEDURE PROC_CONVERT_TABLE

   P_USER_NAME IN VARCHAR2,
   P_TABLE_NAME IN VARCHAR2
)
IS
tmpVar NUMBER;
P_CO_NAME VARCHAR2(200);
P_STR_SQL VARCHAR2(4000);

/******************************************************************************
   NAME:       PROC_CONVERT_TABLE
   PURPOSE:   

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        2009-06-18          1. Created this procedure.

   NOTES:

   Automatically available Auto Replace Keywords:
      Object Name:     PROC_CONVERT_TABLE
      Sysdate:         2009-06-18
      Date and Time:   2009-06-18, 오전 9:09:45, and 2009-06-18 오전 9:09:45
      Username:         (set in TOAD Options, Procedure Editor)
      Table Name:       (set in the "New PL/SQL Object" dialog)

******************************************************************************/
 CURSOR c1 IS
 select column_nm.column_name
 from user_tables, (
     select table_name, column_name, data_type,data_length
     from All_tab_columns
     where owner = P_USER_NAME
     ) column_nm
 where user_tables.table_name = column_nm.table_name
 and user_tables.table_name like P_TABLE_NAME
 and column_name not in ('SMN', 'AY', 'FN');
 
BEGIN

       OPEN c1;
           LOOP
              FETCH c1 INTO P_CO_NAME;
              EXIT WHEN c1%NOTFOUND;

               BEGIN       
     P_STR_SQL := 'INSERT INTO TEMP_2 '
     || ' SELECT SMN, AY, FN,  ' || '''' ||P_CO_NAME|| ''', '
     || ' MAX(DECODE('||P_CO_NAME||', '||P_CO_NAME||', '||P_CO_NAME||')) '
     || ' FROM TEMP '
     || ' GROUP BY SMN, AY, FN '
     || ' ORDER BY SMN';
     EXECUTE IMMEDIATE P_STR_SQL; //쿼리를 동적으로 생성하여 처리할 수 있다.
               END;
           END LOOP;
       CLOSE c1;


   tmpVar := 0;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END PROC_CONVERT_TABLE;


/

크리에이티브 커먼즈 라이센스
Creative Commons License