오라클에서는 Full Outer Join을 하기위해 

양쪽 컬럼에  컬럼(+) = 컬럼(+)를 쓰면 오류가 난다..

그러다 보니 ansi-sql 문법으로 Full Outer Join을 해야한다...

with T1 as (

select '1' A1, '12' A2 from dual

union all

select '3' A1, '32' A2 from dual

)

, T2 as (

select '1' A1, '11' B2 from dual

union all

select '2' A1, '21' B2 from dual

)

, T3 as (

select '2' A1, '11' C2 from dual

union all

select '4' A1, '21' C2 from dual

union all

select '1' A1, '24' C2 from dual

)

select coalesce(T1.A1,T2.A1,T3.A1) A1

        , T1.A2

        , T2.B2

        , T3.C2

from T1 full outer join T2 on T1.A1 = T2.A1

        full outer join T3 on T2.A1 = T3.A1  


결과값

A1 

A2

B2 

C2 

 1

12 

11 

24 

 2

NULL 

21 

11 

3

32 

NULL 

 NULL

 4

 NULL

 NULL

 21


with : 오라클은 with문을 이용하여 임시 테이블 같은 기능을 쓸수 있다.

Coalesce : 오라클의 NVL 대용으로 쓸수 있는 ansi-sql 함수다.


'sql' 카테고리의 다른 글

Join 유형  (0) 2014.03.07
row의 최소값, 최대값을 구하는 함수 GREATEST, LEAST  (0) 2014.03.07
오라클 connect by level 을 이용한 copy_t 테이블  (0) 2014.02.24
오라클 병렬 처리 힌트  (0) 2014.02.12
oracle instr() 함수  (0) 2014.02.12
Posted by 무세1
,

프로그램 작성시...

쿼리툴에서는 잘 돌아가는데..  java 프로그래밍에서는 오류가 발생한다..

ORA-01861: literal does not match format string

select  TO_CHAR(TO_DATE(?),'YYYYMMDD') from dual;  //오류발생

그래서 이걸 다음과 같이 수정

select  TO_CHAR(TO_DATE(?,'YYYYMMDD'),'YYYYMMDD') from dual;  //정상


날짜관련 함수를 사용하는 SQL에서는..  가끔 이런 오류가 발생한다..

이럴땐 날짜관련 함수를 의심하면 된다..

'java' 카테고리의 다른 글

ResultSet rowcount 구하기  (0) 2014.03.14
java 오늘일자 string format YYYYMMDD  (2) 2014.03.12
java String -> hex 변환  (0) 2014.02.20
java String <-> int 변환  (0) 2014.02.19
aes256 암호화 java 샘플  (0) 2014.01.27
Posted by 무세1
,

가끔 SQL작성시  예전에 쓰던 copy_t 테이블이 필요한 경우가 있다.

connect by level 을 이용해서 copy_t 테이블을 구현할 수 있다.


--최근 한달 일자별 임시 테이블

select  to_char(sysdate-level,'YYYYMMDD') cre_dd

from    dual

connect by level <= 31


'sql' 카테고리의 다른 글

row의 최소값, 최대값을 구하는 함수 GREATEST, LEAST  (0) 2014.03.07
Full outer join 다중조인해보기..  (0) 2014.03.06
오라클 병렬 처리 힌트  (0) 2014.02.12
oracle instr() 함수  (0) 2014.02.12
오라클 aes256 암호화  (0) 2014.01.28
Posted by 무세1
,