메뉴 건너뛰기

(*.106.188.101) 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

가 크게 작게 위로 아래로 댓글로 가기 첨부
Extra Form
출처 http://egloos.zum.com/nagid/v/3017597
오라클 Merge / 수행 결과값 리턴하지 않을 때

오라클에 Merge 가 있다.


아실랑가 모르겠지만, 오라클에서 복잡하게 대량으로 업데이트, 삭제 할려고 하면
서브쿼리 쓰던가 
조인뷰를 쓰던가
merge구문을 쓰면 된다.

근데 오라클은 Ms-sql과 달리, 쓰는 방식에 제약이 좀 따른다.
조인뷰의 /*+ BYPASS_UJVC */  힌트는 11g에서 안먹힘.

그래서 1:1의 수정이 아닌 경우에는 좌절됨.
서브쿼리는 속도가 느리다.
그래서 merge를 쓰면 쾌적한 업데이트와 삭제를 하는데
문제는 이게 수행 결과값을 리턴하지 않는다는 것이다.
즉, 몇개 넣었다라는 메세지를 안보내준다.


위를 보다시피 안보인다.
뭐가 얼만큼 실행되었는지 보이지 않는다는 말이다.
한마디로 장님이 된다는 소리.
100만건 업데이트 했는지, 10건 업데이트 했는지 모른다면 어찌 그걸 사용할 수 있으랴?
그래서 존나 인터넷으로 달렸다.
그래서 찾았다.
오호라 구글신이시여

먼저 package를 만들어야 함.

CREATE OR REPLACE PACKAGE etl AS

   c_inserting CONSTANT PLS_INTEGER := 0;
   c_updating  CONSTANT PLS_INTEGER := 1;

   FUNCTION merge_counter (
            action_in IN PLS_INTEGER DEFAULT c_inserting
            ) RETURN PLS_INTEGER;

   FUNCTION get_merge_update_count RETURN PLS_INTEGER;

   FUNCTION get_merge_update_count (
            merge_count_in IN PLS_INTEGER
            ) RETURN PLS_INTEGER;

   FUNCTION get_merge_insert_count RETURN PLS_INTEGER;

   FUNCTION get_merge_insert_count (
            merge_count_in in PLS_INTEGER
            ) RETURN PLS_INTEGER;

   PROCEDURE reset_counters;

END etl;


CREATE OR REPLACE PACKAGE BODY etl AS

   g_update_counter PLS_INTEGER NOT NULL := 0;
   g_insert_counter PLS_INTEGER NOT NULL := 0;

   /*----------- FUNCTION merge_counter -----------*/
   FUNCTION merge_counter (
            action_in IN PLS_INTEGER DEFAULT c_inserting
            ) RETURN PLS_INTEGER IS
   BEGIN
      CASE action_in
         WHEN c_updating
            THEN g_update_counter := g_update_counter + 1;
         WHEN c_inserting
            THEN g_insert_counter := g_insert_counter + 1;
         ELSE
            RAISE PROGRAM_ERROR;
      END CASE;
      RETURN 0;
   END merge_counter;

   /*----------- FUNCTION get_merge_update_count V1 -----------*/
   FUNCTION get_merge_update_count
      RETURN PLS_INTEGER is
   BEGIN
      RETURN g_update_counter;
   END get_merge_update_count;

   /*----------- FUNCTION get_merge_update_count V2 -----------*/
   FUNCTION get_merge_update_count (
            merge_count_in IN PLS_INTEGER
            ) RETURN PLS_INTEGER IS
   BEGIN
      RETURN NVL( merge_count_in - g_insert_counter, 0 );
   END get_merge_update_count;

   /*----------- FUNCTION get_merge_insert_count V1 -----------*/
   FUNCTION get_merge_insert_count
      RETURN PLS_INTEGER IS
   BEGIN
      RETURN g_insert_counter;
   END get_merge_insert_count;

   /*----------- FUNCTION get_merge_insert_count V2 -----------*/
   FUNCTION get_merge_insert_count (
            merge_count_in IN PLS_INTEGER
            ) RETURN PLS_INTEGER IS
   BEGIN
      RETURN NVL( merge_count_in - g_update_counter, 0 );
   END get_merge_insert_count;

   /*----------- FUNCTION reset_counters -----------*/
   PROCEDURE reset_counters IS
   BEGIN
      g_update_counter := 0;
      g_insert_counter := 0;
   END reset_counters;

END etl;


여기까지만 쓰면 만사 오케이

SET SERVEROUTPUT ON;
BEGIN
    MERGE INTO  사원테이블1 X
    USING(
           SELECT a.emp_id, b.deptcd_acct  rep_comp_cd2 
               FROM 사원테이블1 a
                  , 사원테이블2 b
              WHERE a.emp_id= b.emp_id
                and b.status = '1'
          ) B
    ON (X.emp_id = B.emp_id)
    WHEN MATCHED THEN
          UPDATE 
          SET  X.in_user = '업데이트1'
            ,  X.in_time = SYSDATE
          ;
          
    DBMS_OUTPUT.PUT_LINE( TO_CHAR(SQL%ROWCOUNT) || ' 줄 반영되었어..');
    DBMS_OUTPUT.PUT_LINE( TO_CHAR(etl.get_merge_insert_count) || ' 줄 추가되었어.');
    DBMS_OUTPUT.PUT_LINE( TO_CHAR(etl.get_merge_update_count( SQL%ROWCOUNT ))|| ' 줄 수정되셨어.');

END;




List of Articles
번호 제목 날짜 조회 수
91 텍스트 분석 솔루션 (Smart TA) 미소정보기술(대표 안동욱)이 빅데이터 플랫폼을 활용해 암 발생을 줄이는 연구에 참여한다. 또 서울시의 '인공지능(AI)을 활용한 민생범죄 수사지원 분석사업‘에... file 2019.11.09 582
90 빅데이터의 속성 3V, 4V, 5V 빅데이터의 속성 3V, 4V,5V 목차1. 빅데이터의 공통적 속성 3V 2. 빅데이터의 새로운 V - 정확성(Veracity) 3. 빅데이터의 새로운 V - 가변성(Variability) 4. 빅... file 2019.08.12 792
89 마크베이스(Machbase) - IoT Gateway for Edge Analytics What is this for? If you already have or plan to build services that require IoT gateway devices and need to analyze big data generated from numerous s... 2019.07.27 811
88 DB접근제어 - Chakra (샤크라) DB접근제어 (Chakra) 제품개요 데이터베이스 접근제어를 위한 필수 솔루션 DB Access Control & Audit_Chakra Chakra MAX는 고객의 데이터베이스 내에 저장되... file 2019.07.19 628
87 DB접근제어 - DBSAFER 접근제어 방식 DBSAFER - DB 접근제어 보안 솔루션 - DBSAFER는 사용자의 접속과 권한을 제어하고 실시간 모니터링을 통해 정책 위반 사항을 ... file 2019.07.19 9246
86 EDI (Electronic Data Interchange) EDI (Electronic Data Interchange) 전자문서교환. 표준화된 상거래서식 또는 공공서식을 서로 합의된 통신 표준에 따라 컴퓨터 간에 교환하는 정보전달방식 EDI ... file 2017.02.27 514
85 오라클, 특정 테이블의 인덱스명과 구성컬럼 조회 SQL SQL 작성시나 튜닝시 테이블에 인덱스는 중요한 팩터입니다. 토드나 오렌지와 같은 GUI툴은 사용하면 손쉽게 테이블 마다 생성된 인덱스를 볼 수 있는데 툴이 없... 2016.05.23 492
84 Oracle Data Dictionary  Oracle Data Dictionary 2016.05.23 489
» Oracle Merge (수행 결과값 리턴않음) 오라클 Merge / 수행 결과값 리턴하지 않을 때 오라클에 Merge 가 있다. 아실랑가 모르겠지만, 오라클에서 복잡하게 대량으로 업데이트, 삭제 할려고 하면 서브쿼... file 2016.05.21 698
82 ODBC. JDBC ODBC 어떤 응용프로그램을 사용하는지에 관계없이, 데이터베이스를 자유롭게 사용하기 위하여 만든 응용프로그램의 표준방법을 말한다. 데이터베이스 관리 시스템... 2016.05.19 481
81 (빅데이터 분석) R / R-studio 소개 R-Studio 하나의 큰 용량이 아닌 작고 많은 데이터를 분석을 하고자 했다. 이에 가장 적합한 도구는 무엇일까? 빅데이터 트랜드를 대표하는 하둡(Hadoop)의 대용... 2016.05.19 504
80 Oracle wm_concat, listagg, xml parsing Oracle 11gdml listagg : http://estenpark.tistory.com/352 Oracle 10g의 wm_concat : http://blog.naver.com/heart1002/150188149689 XML Parsing : http://blo... 2016.05.19 573
79 데이터베이스 개념, 스키마, DB언어, 관계형 데이터베이스의 종... 데이터베이스 개념, 스키마, DB언어, 관계형 데이터베이스의 종류, 키의 개념, DB설계, 개체관계도[ERD] 데이터베이스 정의 - 데이터베이스는 특정 조직의 기능을... 2016.05.14 478
78 Oracle - sqldeveloper-4.1.3.20.78-x64 Oracle - sqldeveloper-4.1.3.20.78-x64 2016.05.08 493
77 오라클 SQL & PLSQL 강좌 #3/3 오라클 SQL & PLSQL 잠자리 #3/3 2016.05.08 486
76 오라클 SQL & PLSQL 강좌 #2/3 오라클 SQL & PLSQL 잠자리 강좌 #2/3 2016.05.08 438
75 오라클 SQL & PLSQL 강좌 #1/3 오라클 SQL & PLSQL 강좌 #1/3 2016.05.08 472
74 Crystal Reports OLAP Crystal Reports OLAP file 2016.04.30 594
73 빅데이터 IBM 자료 1. 빅데이터 소개 자료 아래 링크를 누르면 소개자료가 저장된 Box로 이동합니다. https://ibm.box.com/s/0e7wkmbp4u4n8ukgzsttpyoryt71saaw 2. 한국IBM Analytic... 2016.04.29 428
72 Large Object - LOB의 저장방식 및 사용법 Large Object - LOB의 저장방식 및 사용법 Oracle의 경우, 대용량 데이터를 처리하기 위해서 Oracle 8i부터 대용량 데이터를 저장할 수 있는 LOB(Large Object) ... 1 2016.04.25 498
목록
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7