본문 바로가기

Study/Oracle

[oracle] 프로시저 수식, 문자연결 수식, 대입연산자, cursor, for-loop exit, INSERT FOR LOOP, exception

문자연결 연산자 ||

대입 연산자       :=

 

 

문자연결 수식, 대입연산자, cursor

apt_info에 맞게 dong_info name 수정

 

CREATE OR REPLACE PROCEDURE SCOTT.SET_APT_NAME

IS

    V_NAME VARCHAR2(100) DEFAULT '';

    V_A_CODE VARCHAR2(100) DEFAULT '';

    V_D_CODE VARCHAR2(100) DEFAULT '';

  

    CURSOR V_LIST

    IS

        SELECT D.APT_CODE L_A_CODE, D.DONG_CODE L_D_CODE, A.NAME L_A_NAME

        FROM DONG_INFO D, APT_INFO A

        WHERE D.APT_CODE = A.APT_CODE;

 BEGIN

    FOR V_FOR IN V_LIST LOOP

        V_A_CODE := V_FOR.L_A_CODE;

        V_D_CODE := V_FOR.L_D_CODE;

        V_NAME := V_FOR.L_A_NAME||V_D_CODE||'';

       

        UPDATE DONG_INFO

        SET NAME = V_NAME

        WHERE DONG_CODE = V_FOR.L_D_CODE;

 

    END LOOP;

   

END;

/

 

 

cursor, for-loop exit, exception

CREATE OR REPLACE PROCEDURE MEDI.OP_BAS_LOAD_ZIP_CODE1

                (I_ZIP_NAME     IN           VARCHAR2,

                 IO_ZIP_CODE    IN OUT       VARCHAR2,

                 IO_ZIP_TONGGYE IN OUT       VARCHAR2,

                 IO_ERR         IN OUT       VARCHAR2) IS

  CURSOR C1 IS SELECT ZIP_CODE1, ZIP_TONGGYE FROM BAS0120

                WHERE ZIP_NAME1 = I_ZIP_NAME;

BEGIN

IO_ERR := '1';

  FOR A1 IN C1 LOOP

    IO_ERR := '0';

    IO_ZIP_CODE    :=   A1.ZIP_CODE1;

    IO_ZIP_TONGGYE :=   A1.ZIP_TONGGYE;

    EXIT;

  END LOOP;

EXCEPTION

        WHEN    DUP_VAL_ON_INDEX   THEN

                IO_ERR      :=  'D';

        WHEN    VALUE_ERROR        THEN

                IO_ERR      :=  'V';

        WHEN    TOO_MANY_ROWS      THEN

                IO_ERR      :=  'T';

        WHEN    INVALID_CURSOR     THEN

                IO_ERR      :=  'I';

        WHEN    OTHERS             THEN

                IO_ERR      :=  'Z';

END;

 

 

PROCEDURE, CURSOR, INSERT FOR LOOP

TMP_UPLOAD_COL10_TBL 에 있는 COR1 과 COR2에 대한 데이터를 

BJD_INFO에 DO, SI, GU, DONG, RI 에 맞게 삽입하기

 

REGEXP_SUBSTR(자르고싶은문자, 자를문자, 자를위치, 자를위치에서 첫번째 자를문자가 해당하는 위치);

EX) REGEXP_SUBSTR(COL2, '[^ ]+', 1, 1) C2_1,

 

CREATE OR REPLACE PROCEDURE SCOTT.SET_BJD_INFO

IS

    CURSOR LIST_1

    IS

        SELECT

             COL1 C1,

             COL2 C2

        FROM TMP_UPLOAD_COL10_TBL

        WHERE COL1 LIKE '____000000%';

       

    CURSOR LIST_2

    IS

        SELECT

            COL1 C1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 1) C2_1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 2) C2_2

        FROM TMP_UPLOAD_COL10_TBL

        WHERE COL1 LIKE '____000000%'

        AND COL1 NOT LIKE '__00000000%';

 

    CURSOR LIST_3

    IS

        SELECT

            COL1 C1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 1) C2_1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 2) C2_2,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 3) C2_3

        FROM TMP_UPLOAD_COL10_TBL

        WHERE COL1 LIKE '______0000%'

        AND COL1 NOT LIKE '____000000%'

        AND COL1 NOT LIKE '__00000000%';

       

    CURSOR LIST_4

    IS

        SELECT

            COL1 C1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 1) C2_1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 2) C2_2,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 3) C2_3,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 4) C2_4

        FROM TMP_UPLOAD_COL10_TBL

        WHERE COL1 LIKE '________00%'

        AND COL1 NOT LIKE '______0000%'

        AND COL1 NOT LIKE '____000000%'

        AND COL1 NOT LIKE '__00000000%';

 

    CURSOR LIST_5

    IS

        SELECT

            COL1 C1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 1) C2_1,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 2) C2_2,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 3) C2_3,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 4) C2_4,

            REGEXP_SUBSTR(COL2, '[^ ]+', 1, 5) C2_5

        FROM TMP_UPLOAD_COL10_TBL

        WHERE COL1 LIKE '__________%'

        AND COL1 NOT  LIKE '________00%'

        AND COL1 NOT LIKE '______0000%'

        AND COL1 NOT LIKE '____000000%'

        AND COL1 NOT LIKE '__00000000%';   

       

BEGIN

    FOR LIST_DO IN LIST_1 LOOP

        INSERT INTO BJD_INFO VALUES (LIST_DO.C1, LIST_DO.C2, '', '', '', '');

    END LOOP;

 

    FOR LIST_SI IN LIST_2 LOOP

        INSERT INTO BJD_INFO VALUES (LIST_SI.C1, LIST_SI.C2_1, LIST_SI.C2_2, '', '', '');

    END LOOP;

 

    FOR LIST_GU IN LIST_3 LOOP

        INSERT INTO BJD_INFO VALUES (LIST_GU.C1, LIST_GU.C2_1, LIST_GU.C2_2, LIST_GU.C2_3, '', '');

    END LOOP;

   

    FOR LIST_DONG IN LIST_4 LOOP

        INSERT INTO BJD_INFO VALUES (LIST_DONG.C1, LIST_DONG.C2_1, LIST_DONG.C2_2, LIST_DONG.C2_3, LIST_DONG.C2_4, '');

    END LOOP;

   

    FOR LIST_RI IN LIST_5 LOOP

        INSERT INTO BJD_INFO VALUES (LIST_RI.C1, LIST_RI.C2_1, LIST_RI.C2_2, LIST_RI.C2_3, LIST_RI.C2_4, LIST_RI.C2_5);

    END LOOP;   

END SET_BJD_INFO;

/

'Study > Oracle' 카테고리의 다른 글

[Oracle] DB 링크, 시퀀스, 트리거  (0) 2019.05.20
[Oracle] GRANT 권한부여  (0) 2019.05.20
[oracle] CREATE, PROCEDURE  (0) 2019.05.14
[oracle] .sql -> .sqlite 저장  (0) 2019.05.14
[oracle] 소개 및 설치  (0) 2019.05.14