본문 바로가기
SAS/SAS Tip's

SAS상 에서 오라클 PARALLE 힌트 적용하여서 DB Insert 작업 수행하기

by 기서무나구물 2021. 10. 8.

포스팅 목차

    SAS상 에서 오라클 PARALLE 힌트 적용하여서 DB Insert 작업 수행하기

     

    proc sql을 사용하여서 Inert/delete 오라클 명령어를 직접 수행 할 수 있는데, 이 경우 오라클 Hint를 함께 적용하기 위하여 "PRESERVE_COMMENTS" 옵션을 지정해야 하고, execute by oracle 방식으로 오라클 명령어를 전달해야 한다. 과거의 execute ( ) by oralce; 방식으로는 Hint가 전달이 안됨.

    ( 오라클 상에서 insert / delete 작업을 수행하면서 parallel 방식으로 수행하기 위하여 Alter session으로 옵션을 변경해주어야 합니다. 이 부분의 상세한 구글신을 통하여 확인하시기를 바랍니다.)

     

    proc sql; 
      connect to oracle(user="&REAL_USER" orapw="&REAL_PASS" path="&REAL_PATH" PRESERVE_COMMENTS ADJUST_BYTE_SEMANTIC_COLUMN_LENGTHS=no DBCLIENT_MAX_BYTES=1 BUFFSIZE=10000); 
      %put &sqlxmsg; 
      
      execute by oracle (ALTER SESSION ENABLE PARALLEL DML) ; 
      execute by oracle (ALTER SESSION SET DB_FILE_MULTIBLOCK_READ_COUNT = 512) ; 
      execute by oracle (ALTER TABLE EISPART.STATSAS NOLOGGING) ; 
      
      execute by oracle 
        ( INSERT /*+ append parallel(s,10) nologging */ INTO AP_EDQF03 s /* 현재 로딩 건수가 적어서 이 부분 Parallel 옵션을 필요 없음 */ 
            SELECT /*+ FULL(A) PARALLEL(A,8) */ 
                   TO_CHAR(SYSDATE,'YYYYMM') AS MAG_YMD ,
                   'CONTRACT' AS OWNER_NM ,
                   'TGF636' AS TABLE_NM ,
                   'DMB_LHE' AS VARIABLE_NM ,
                   'DQ_CONDITION02' AS CHECK_VARS ,
                   'AC0101' AS CHECK_ITEM ,
                   COUNT(*) AS DQ_TAR_CNT ,
                   SUM(CASE WHEN DMB_LHS > DMB_LHE THEN 1 ELSE 0 END) AS DQ_RESULT ,
                   TO_CHAR(SYSDATE,'YYYYMMDD') AS INPUT_DT ,
                   TO_CHAR(SYSDATE,'HH24MISS') AS INPUT_TIME 
            FROM 대용량테이블 A 
            WHERE A.MAG_YMD >= TO_CHAR(SYSDATE - 30 * 3,'YYYYMMDD') 
        ) ;
      execute by oracle (alter session disable parallel dml) ; 
      execute by oracle(alter table AP_EDQF03 logging noparallel) ; 
      execute by oracle (COMMIT) ; 
      
      %put &sqlxmsg; 
      disconnect from oracle; 
    quit;
    반응형

    댓글