Oracle MERGE INTO를 활용해 값이 있는지 확인후 insert , update , delete ,selete 하는 방법 


이전에 포스팅 했던 MSSQL의 EXISTS 기능을 오라클에서 사용하는 방법이다


2016/08/12 - [Yame Programmer/SQL] - [MSSQL] 값이 존재하는지 확인 후 update insert [EXISTS] 활용



MSSQL을 사용했던 프로젝트를 Oracle로 마이그레이션 하게 되면서 다시 사용하게 되었다.


입사 초기에 Oracle를 사용하다 이후 쭉 MSSQL만 써서 기억이 가물가물 했다ㅋㅋ



1. 기본 포맷


1
2
3
4
5
6
MERGE INTO 테이블명  USING ( 서브쿼리 ) 
ON  ( 조건 )
WHEN MATCHED THEN 
조건에 값이 있는 경우 실행할 쿼리 
WHEN NOT MATCHED THEN 
조건에 값이 없는 경우 실행할 쿼리 
cs



2. 간단한 예제


1) 서브쿼리 없이 사용


1
2
3
4
5
6
7
8
9
10
11
12
13
MERGE INTO 
    TABLENAME  
USING DUAL 
    ON (PK_CD = 'PKCD001'  AND DATA_NAME = 'dataName')
    WHEN MATCHED THEN     
        UPDATE SET     
                DATA_COL1 = '업데이트 내용 1',             
                DATA_COL2 = '업데이트 내용 2',             
                DATA_COL3 = '업데이트 내용 3',         
        
    WHEN NOT MATCHED THEN
        INSERT (PK_CD, DATA_NAME,  DATA_COL1, DATA_COL2, DATA_COL3)
        VALUES('PKCD001''dataName''넣을 내용1''넣을 내용3''넣을 내용3')
cs




2) 서브쿼리 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
MERGE INTO 
    TABLE_NAME  TARGETTB
USING(
    SELECT 
        CHECKTB.PK_CD
        ,CHECKTB.DATA_NAME
    FROM
        TABLE_NAME CHECKTB
     LEFT JOIN
        JOIN_TB JT
    ON
        JT.DATA = CHECKTB.DATA 
        ) CHECK
 
    ON (TARGETTB.PK_CD = CHECK.PK_CD    AND   TARGETTB.DATA_NAME = CHECK.DATA_NAME)
    WHEN MATCHED THEN     
        UPDATE SET     
                DATA_COL1 = '업데이트 내용 1',             
                DATA_COL2 = '업데이트 내용 2',             
                DATA_COL3 = '업데이트 내용 3',         
        
    WHEN NOT MATCHED THEN
        INSERT (PK_CD, DATA_NAME,  DATA_COL1, DATA_COL2, DATA_COL3)
        VALUES('PKCD001''dataName''넣을 내용1''넣을 내용3''넣을 내용3')
cs

꼭 INSERT UPDATE만 넣을 수 있는게 아니라 SELECT DELETE를 넣어서 사용 할 수도 있다.




Kendo UI의 그리드를 사용할떄


특정 값이 들어오면 그리드의 내용을 다른것으로 바꾸는 방법에 대해 알아보자.



예를들어 값이 0으로 들어오면 '미사용'  1로 들어오면 '사용' 이런식으로 말이다.


일반적으로 DB에서 값이 0으로 들어오면 0으로 1로 들어오면 1로 표기가 되는데


켄도의 템플릿(template) 기능을 사용하면 좀더 다양하게 활용이 가능 하다



일반적인 켄도 그리드의 컬럼 설정 스크립트이다.


1
2
3
4
5
columns: [
             {field: "code_ID", width:"80", title: "코드 ID"},
            {field: "code_NAME", width:"130", title: "코드 명칭"},
            {field: "code_TYPE", width:"80", title: "사용여부"}
        ]
cs


위와 같이 필드 아이디와 타이틀 정도만 설정을 해주면


해당 오브젝트의 값이 그대로 들어가게 된다.



템플릿을 이용해 사용여부 code_TYPE에 값이 0으로 들어오면 미사용 1로 들어오면 사용 이라고 표현하기 위한 코드는



1
2
3
4
5
6
columns: [
             {field: "code_ID", width:"80", title: "코드 ID"},
            {field: "code_NAME", width:"130", title: "코드 명칭"},
            {field: "code_TYPE", width:"80", title: "사용여부",
             template:kendo.template("#if (code_TYPE == 0) {# #='미사용'# #} else if(code_TYPE== 1 ){# #='사'# #} else {# #='NFC'# #} #")}
        ]
cs



컬럼을 만들어주는 객체에 template라는 것을 추가해고


위와 같이 코딩하게 되면 IF문을 사용하여 code_type의 값에 따라 다른 내용을 출력 할 수 있게 된다.



템플릿을 사용하면 그리드를 다양하게 활용 할 수가 있다.


JSTL IF, ELSE IF(choose)문 사용 방법.



HTML 페이지를 만들때 굉장히 유용하게 사용하는 JSTL 중에서도 가장 많이 쓰는


IF문의 사용에 대해서 알아보자


1. 단순 IF


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<c:set var="data" value="안녕" />
 
<c:if test="${data eq '안녕'}">
    안녕을 출력 합니다.
</c:if>
 
<!-- 서버에서 result 라는 데이터를 modell을
     통해서 받아 사용하는 경우 (EL 태그 사용) -->
 
<c:if test="${result.data eq '안녕' }">
    안녕을 출력 합니다.
</c:if>
 
<!-- 서버에서 두개의 데이터
    result1과 result2 를 받아서 비교 할때(EL 태그 사용) -->
 
<c:if test="${result1.data eq result2.data}">
    두개의 데이터가 일치 합니다.
</c:if>
cs



위와 같이 사용 할 수 있다.


2. if else , choose문


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<c:set var="data" value="개발자" />
 
<c:choose>
 
    <c:when test="${name eq '개발자'}">
        개발자 입니다.
    </c:when>
 
    <c:when test="${name eq '사장'}">
        개발자가 아닌 사장 입니다.
    </c:when>
 
    <c:otherwise>
        아무것도 아닌 사람 입니다.
    </c:otherwise>
 
</c:choose>
cs
d

if else라는 표현을 사용 하는것이 아닌


choose 라는 문법을 사용한다.




3. 비교 연산자


1) eq (==)


두 값이 동일 할때


2) ne ( !=)


동일 하지 않을때


3. empty ( == null)

값이 null 일때


제 포스팅이 도움이 되었나요? 

그렇다면 공감하기 한번 눌러주세요 블로거에게 큰 힘이 됩니다



제어구조

:흐름을 제어

1.반복문

while(true)

{

break; ->무조건 벗어남.(선택적으로 벗어날 수 있도록 구성)

}

만약에 menu가 2라면 if (menu == 2) -->선택문




import java.util.Scanner;



public class forgugu {

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

System.out.print("1.숫자를 입력 하세요:");

int a = s.nextInt();

System.out.print("2.숫자를 입력 하세요:");

int b = s.nextInt();

System.out.println("입력한 값은:"+a+","+b);

if (a>b)

{

for (int i = b; i<=a; i++){

for(int j=1; j<10; j++)

{

System.out.println(i+"*"+j+"="+i*j);

}

}

}

else if (a<b)

{

for (int i=a; i<=b; i++){

for(int j=1; j<10; j++)

{

System.out.println(i+"*"+j+"="+i*j);

}

}

}

else

{

System.out.print("두 수는 같다");

}

}

}



선택 흐름(if문)

1.선택

2.검사 한번만

변수에서 유효한 범위->도메인

ex) 점수의 도메인 0~100

if(kor<0 || kor>100) 한번 검사!!!

여러번 검사 (while 문)


입력값을 검사 do while문




파일 입출력

FileOutputStream fos = new FileOutputStream(""


ctrl+shift+o =>자동으로 imprort

fos.write('A'); 문자하나하나만을 출력


FileOutputStream fos = new FileOutputStream("d:\\test.text");

fos.write('A'); //문자하나 쓰는 기능

fos.flush(); //비우는 기능

fos.close();


fos.flush();->데이터가 다 찰때까지 조금 기달리는 기능(끝에 한번만 선언)

while문 밖에다 선언


do{

c= fis.read();

if( c!= -1)


4bit=1byte


8bit


Big Endian   vs  Littile Endian

+ Recent posts