[Oracle] PL/SQL –


CURSOR는 아래에서 사용됩니다.
이것은 PROCEDURE 예제입니다.
커서로 조회한 데이터는 MERGE INTO로 검색할 수 있습니다.
존재하는 경우 UPT_DATE를 변경하고 데이터가 없으면 입력하십시오.

CREATE OR REPLACE PROCEDURE PRC_SAMPLE (V_YMD IN VARCHAR2, V_CNT OUT NUMBER)
IS
   CURSOR CURSOR_DATA (P_YMD IN VARCHAR2)
   IS
      SELECT YMD, CODE, COUNT (1) CNT
        FROM TB_SAMPLE
       WHERE YMD = P_YMD;

   RECORD_DATA   CURSOR_DATA%ROWTYPE;

BEGIN
   FOR RECORD_DATA IN CURSOR_DATA(V_YMD)
   LOOP
      MERGE INTO TB_TEST
           USING DUAL
              ON (YMD = RECORD_DATA.YMD AND CODE = RECORD_DATA.CODE)
      WHEN MATCHED THEN
         UPDATE SET UPT_DATE = SYSDATE
      WHEN NOT MATCHED THEN
         INSERT     (YMD,
                     CODE,
                     CNT,
                     INS_DATE,
                     UPT_DATE)
             VALUES (RECORD_DATA.YMD,
                     RECORD_DATA.CODE,
                     RECORD_DATA.CNT,
                     SYSDATE,
                     SYSDATE);

      V_CNT := V_CNT + 1;
   END LOOP;

   COMMIT;
   
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE ('SQLCODE = ' || TO_CHAR (SQLCODE) || ', SQLERRM = ' || SQLERRM);
      ROLLBACK;
END;