MERGE INTO 등록할_테이블_명 TB_NM

  USING(SELECT USER_NO FROM USER_TABLE WHERE USER_NO = '001') U_TB --> 검색할 쿼리

  ON (TB_NM.USER_NO = U_TB.USER_NO)  --> INSERT, UPDATE 조건

    WHEN MATCHED THEN -- 조건에 일치할경우 이하의 쿼리 실행 (UPDATE)

        UPDATE

        SET TB_NM.USER_NO = '001',

                TB_NM.USER_NAME = '유저명'

    WHEN NOT MATCHED THEN --> 조건이 일치하지 않을경우 이하의 쿼리 실행 (INSERT) 

        INSERT (TB_NM.USER_NO, TB_NM.USER_NAME)

        VALUES ('001', '유저명')

 

 

만약 한개의 테이블에서 검색/입력/수정을 할 경우에는 DUAL을 사용하는 편이 낫다.

============================ 이하 예시 ============================

 

MERGE INTO USER_TABLE A

  USING DUAL

       ON (A.USER_NO = '10')

WHEN MATCHED THEN

UPDATE SET

             DEPT_NO = '30'

WHEN NOT MATCHED THEN

INSERT (USER_NO, USER_NM, DEPT_NO)

VALUES('10', '유저명', '30')

 

 

1. 위의 query는 정상인데 ORA-00900 : SQL문이 부적합니다.  라는 오류가 발생한다면 

    JAVA에서 dataAccesser.update 를 사용한게 아니라 dataAccesser.query 를 사용했기 때문.

 

2. 한개의 테이블에서 검색/입력/수정할 경우에는 USING DUAL 을 사용, ON에 직접 조건 값을 입력해준다.

 

○출처ㅣm.blog.naver.com/PostList.nhn?blogId=bluefish115

프로시저

*리턴 값이 필요없고, 각각의 절차적 쿼리를 순차적으로 일괄 진행하기 위해 사용하지만

 리턴하고 싶다면 리턴 할수는 있음

 

함수

*내장함수가 제공하지 않은 사용자가 원하는 함수를 만들어 쓸 수 있으며, 주로 함수의 결과

 리턴 값을 받아쓰기 위해 사용한다. 

 

트리거

*테이블의 특정 동작이 일어나면 자동실행(테이블의 DML문이 작동되면 자동으로 실행)

 

커서

*결과의 로우수는 하나 이상인데, 개별로우에 순차적으로 접근하여 가공하거나 저장해서

 쓰려고 할 때 사용 

 

복잡한거 다 때려치고

문법은 생략 개념만 익히자

같은 값이라 중복순위가 나올때

 

Rank - 1,2,3,3,5,6  - 공동3등 2명이라 5등부터 시작

 

dense rank - 1,2,3,3,4,5 - 공동 3등이 2명이라도 다음숫자(4)부터 시작

 

rank number - 1,2,3,4,5,6 - 3과 4의 순위가 같아도 랜덤하게 순위부여

 

 

 

 

+ Recent posts