본문 바로가기

오라클34

[쿼리문] Merge into를 이용해서 insert나 update를 자동으로 실행하자. MERGE INTO 쿼리를 이용하면 Update나 Insert를 하기 위해 해당 데이타가 존재하는지 확인하기 위해 따로 Select를 하지 않아도 됩니다. 데이타가 존재하는지 알아서 판단해서 Update이나 Insert를 실행하기 때문이죠. 저도 그 편리함 때문에 종종 MERGE INTO를 사용합니다.MERGE INTO 테이블명 USING DUAL ON ( 조인조건 ) WHEN MATCHED THEN UPDATE 문 WHEN NOT MATCHED THEN INSERT 문 쿼리는 위와 같이 구성이 됩니다. 조인조건에 해당하는 데이타가 있는지 확인해서 Update 또는 Insert를 실행하게 됩니다. 아래 예제를 보면 어떻게 사용하는지 명확하게 알 수 있습니다. MERGE INTO TB_USER USING .. 2015. 2. 4.
[쿼리문/오라클] Oracle에서 중복 조인을 피하기 위한 Update 방법 (MERGE 사용) 중복 조인을 피하기 위한 update 방법에 대해 알아보겠습니다. UPDATE TotalPoint T SET usePoint = (SELECT usePoint FROM UserPoint U WHERE U.userId = T.userId), totPoint = totPoint + (SELECT usePoint FROM UserPoint U WHERE U.userId = T.userId) FROM userId = 'testUser' 이런식으로 서브쿼리를 2번 같은 내용으로 사용하는 것은 비효율적이다. 만약에 더 많은 컬럼값을 Update해야 한다면 중복이 더 많아질 것이다.Merge를 사용하면 이러한 중복을 줄일 수 있다. MERGE INTO TotalPoint T USING ( SELECT userId, .. 2011. 4. 1.
단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법 1. 단일행을 다중 row로 분리 오라클에서 '1,2,3,4,5'라는 문자열을 레코드로 만들려면 어떻게해야 할까? '1,2,3,4,5' return =========== 1 2 3 4 5 즉, 결과가 위와같이 나오게 하려면? connect by를 사용해서 만들수가 있다.SELECT SUBSTR (str, INSTR (str, ',', 1, LEVEL) + 1, INSTR (str, ',', 1, LEVEL + 1) - INSTR (str, ',', 1, LEVEL) - 1 ) sub FROM (SELECT ',' || '1,2,3,4,5' || ',' str FROM DUAL) CONNECT BY LEVEL 2011. 3. 14.
[Oracle] 오라클에서 WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자. MSSQL문의 저장프로시저를 분석해서 자바 배치를 만드는 작업을 하던 중에.. 막히는 부분이 있었다. MSSQL의 저장프로시저에는 무조건 쿼리를 만들어 임시테이블에 넣고, 그 임시테이블을 가지고 이것저것 조건을 건 다음에 다시 다른 임시테이블에 넣는 작업이 반복되고 있었다. 며칠을 고민한 끝에 오라클의 WITH문을 발견하고 '만세~!'를 불렀다. ㅋ WITH문을 사용하면 자유자재로 쿼리를 뷰처럼 재사용할 수 있었기 때문이다. WITH viewData AS ( SELECT * FROM TestTable_1 ) SELECT * FROM viewData ; 이건 WITH 문의 기본 문장이다. WITH name AS ( 쿼리 ) 그런데, WITH문에 다중 쿼리를 사용하면 그 위력이 엄청나게 된다. WITH vi.. 2011. 3. 3.