달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

프로시저의 매개변수 값으로 분리자로 처리된 값이 들어온 경우에

스플릿으로 잘라낸 후 배열처럼 사용하는 방법.

 

 

CREATE OR REPLACE PROCEDURE SP_ARRAY_TEST
(
  PIN_EXEC_DATA      IN NVARCHAR2
)
IS  
  vExecDataArr SPLIT_ROW;
  vExecRowArr SPLIT_ROW;

  VCnt INTEGER := 0;
  V_USER_DEF_EXP          EXCEPTION;

BEGIN

  

  SELECT F_SPLIT(PIN_EXEC_DATA,'^') INTO vExecDataArr FROM DUAL;

 

  FOR IDX IN vExecDataArr.FIRST .. vExecDataArr.LAST LOOP
    IF vExecDataArr(IDX) IS NULL THEN
      GOTO END_LOOP;
    END IF;

 

    SELECT F_SPLIT(vExecDataArr(IDX),'|') INTO vExecRowArr FROM DUAL;


    IF 4 != vExecRowArr.COUNT THEN
       POUT_RESULT_MSG := '정보가 부정확합니다[' || vExecDataArr(IDX) || '].';
       RAISE V_USER_DEF_EXP;
    END IF;

 

    vCnt := vCnt + 1;

 

    INSERT INTO [TABLE_NAME]
    (
        COL1,

        COL2,

        COL3,

        COL4,

        COL5
    )
    VALUES
    (

      VCnt,
      vExecRowArr(0),
      vExecRowArr(1),
      vExecRowArr(2),
      vExecRowArr(3)
    );

    <<END_LOOP>>
    NULL;
  END LOOP;


  COMMIT;

 

  EXCEPTION
     WHEN V_USER_DEF_EXP THEN
       ROLLBACK;
       POUT_RESULT := 'E';
       RAISE_APPLICATION_ERROR(-20001, POUT_RESULT_MSG);
     WHEN OTHERS THEN
       ROLLBACK;
       POUT_RESULT := 'E';
       POUT_RESULT_MSG := SQLCODE||':'||SQLERRM;
       RAISE_APPLICATION_ERROR(-20002, POUT_RESULT_MSG);

END;

'ORACLE 이야기' 카테고리의 다른 글

Oracle Merge  (0) 2015.12.11
Oracle DYNAMIC WHERE CLAUSE  (0) 2015.12.11
Oracle LISTAGG  (0) 2015.12.11
Oracle DB LINK  (0) 2015.12.11
IN 절 SPLIT 함수 튜닝 힌트  (0) 2015.12.11
Posted by 은하비류연
|

Oracle LISTAGG

ORACLE 이야기 2015. 12. 11. 15:48
WITH TEMP AS (
SELECT '10' DEPTNO, 'A' NAME FROM DUAL UNION ALL
SELECT '10' DEPTNO, 'A' NAME FROM DUAL UNION ALL
SELECT '20' DEPTNO, 'B' NAME FROM DUAL UNION ALL
SELECT '20' DEPTNO, 'B' NAME FROM DUAL UNION ALL
SELECT '20' DEPTNO, 'B' NAME FROM DUAL
)
SELECT LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY DEPTNO)
  FROM TEMP
 GROUP BY DEPTNO; 

 

문자열 CONCAT 처리 할때 사용.

 

오라클 11g 부터 지원

 

하위버전에서는 WM_CONCAT 사용.

'ORACLE 이야기' 카테고리의 다른 글

Oracle DYNAMIC WHERE CLAUSE  (0) 2015.12.11
Oracle Array 처리.  (0) 2015.12.11
Oracle DB LINK  (0) 2015.12.11
IN 절 SPLIT 함수 튜닝 힌트  (0) 2015.12.11
Oracle Read to Collection Data  (0) 2015.01.22
Posted by 은하비류연
|

Oracle DB LINK

ORACLE 이야기 2015. 12. 11. 15:42

CREATE PUBLIC DATABASE LINK [DB LINK NAME]

CONNECT TO [CONNECTION NAME]
IDENTIFIED BY [ACCOUNT NAME]
USING '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = IP)(PORT = PORT NUMBER))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )';

 

'ORACLE 이야기' 카테고리의 다른 글

Oracle Array 처리.  (0) 2015.12.11
Oracle LISTAGG  (0) 2015.12.11
IN 절 SPLIT 함수 튜닝 힌트  (0) 2015.12.11
Oracle Read to Collection Data  (0) 2015.01.22
Oracle Danamic Pivot  (0) 2015.01.22
Posted by 은하비류연
|