문서유형ㅣ기술정보
분야ㅣ마이그레이션
적용제품버전ㅣ7FS02PS
문서번호ㅣTMITI007
개요
Tibero 7 FS02 PS02 버전에서 Cross Apply 구문을 지원하지 않습니다.
Oracle에서 사용하는 Cross Apply 구문을 Tibero에서 우회하여 처리할 수 있는 방법을 안내합니다.
방법
Cross Apply, Outer Apply 특징 설명
| 특징 | Cross Apply | Outer Apply |
|---|---|---|
| 오른쪽 피연산자 | 테이블 표현식 (테이블 함수 포함 가능) | 테이블 표현식 (테이블 함수 포함 가능) |
| 평가 방식 | 왼쪽 테이블의 각 행에 대해 오른쪽 테이블 표현식을 평가함. | 왼쪽 테이블의 각 행에 대해 오른쪽 테이블 표현식을 평가함. |
| 결과 행 (오른쪽 표현식 결과 없을 때) | 왼쪽 테이블의 해당 행은 유지되고, 오른쪽 테이블 표현식의 컬럼은 NULL 값으로 채워짐. (LEFT OUTER JOIN과 유사) | 왼쪽 테이블의 해당 행은 유지되고, 오른쪽 테이블 표현식의 컬럼은 NULL 값으로 채워짐. (LEFT OUTER JOIN과 유사) |
1. Cross Apply
샘플 데이터
SQL> create table A ( id number, name varchar(20)); SQL> insert into A values (1, 'KIM'); SQL> insert into A values (2, 'LEE'); SQL> insert into A values (3, 'PARK'); SQL> commit; SQL> create table B ( id number, nickname varchar(20)); SQL> insert into B values (1, 'TEST01'); SQL> insert into B values (2, 'TEST02'); SQL> commit;
오라클에서 cross apply 구문 수행
SQL> select * from A cross apply ( select * from B where A.id = B.id ) B;
ID NAME ID NICKNAME
---------- --------- ---------- --------------------
1 KIM 1 TEST01
2 LEE 2 TEST02
SQL> select A.id, A.name, B.nickname from A cross apply ( select * from B where A.id = B.id ) B;
ID NAME NICKNAME
------- ------------ --------------------
1 KIM TEST01
2 LEE TEST02Tibero에서 cross apply 구문 수행
SQL> select * from A cross apply ( select * from B where A.id = B.id ) B;
ID NAME ID NICKNAME
---------- --------- ---------- --------------------
1 KIM 1 TEST01
2 LEE 2 TEST02
SQL> select A.id, A.name, B.nickname from A cross apply ( select * from B where A.id = B.id ) B;
ID NAME NICKNAME
------- ------------ --------------------
1 KIM TEST01
2 LEE TEST02Tibero에서 cross apply 구문 수행
SQL> select * from A cross apply ( select * from B where A.id = B.id ) B;
TBR-8021: Invalid table name.
at line 1, column 23 of null:
select * from A cross apply ( select * from B where A.id = B.id ) B
^
SQL> select A.id, A.name, B.nickname from A cross apply ( select * from B where A.id = B.id ) B;
TBR-8021: Invalid table name.
at line 1, column 46 of null:
select A.id, A.name, B.nickname from A cross apply ( select * from B where A.id Tibero에서 inner join으로 우회
SQL> select * from A inner join b on A.id = B.id;
ID NAME ID NICKNAME
------- ------------ ------- ------------
1 KIM 1 TEST01
2 LEE 2 TEST02
2 rows selected.
SQL> select A.id, A.name, B.nickname from A inner join b on A.id = B.id;
ID NAME NICKNAME
------- ------------ ----------
1 KIM TEST01
2 LEE TEST02
2 rows selected.
2. Outer Apply
샘플 데이터
SQL> create table A ( id number, name varchar(20)); SQL> insert into A values (1, 'KIM'); SQL> insert into A values (2, 'LEE'); SQL> insert into A values (3, 'PARK'); SQL> commit; SQL> create table B ( id number, nickname varchar(20)); SQL> insert into B values (1, 'TEST01'); SQL> insert into B values (2, 'TEST02'); SQL> commit;
오라클에서 outer apply 구문 수행
SQL> select * from A outer apply ( select * from B where A.id = B.id ) B; ID NAME ID NICKNAME ---- --------- ---------- -------------------- 1 KIM 1 TEST01 2 LEE 2 TEST02 3 PARK SQL> select A.id, A.name, B.nickname from A outer apply ( select * from B where A.id = B.id ) B; ID NAME NICKNAME ------- ------------ ---------- 1 KIM TEST01 2 LEE TEST02 3 PARK
Tibero에서 cross apply 구문 수행
SQL> select * from A outer apply ( select * from B where A.id = B.id ) B;
TBR-8022: Invalid end of SQL.
at line 1, column 23 of null:
select * from A outer apply ( select * from B where A.id = B.id ) B
^
SQL> select A.id, A.name, B.nickname from A outer apply ( select * from B where A.id = B.id ) B;
TBR-8022: Invalid end of SQL.
at line 1, column 46 of null:
select A.id, A.name, B.nickname from A outer apply ( select * from B where A.idTibero에서 left outer join으로 우회
SQL> select * from A left outer join b on A.id = B.id;
ID NAME ID NICKNAME
------- ------------ ------- ------------
1 KIM 1 TEST01
2 LEE 2 TEST02
3 PARK
3 rows selected.
SQL> select A.id, A.name, B.nickname from A left outer join b on A.id = B.id;
ID NAME NICKNAME
------- ------------ ----------
1 KIM TEST01
2 LEE TEST02
3 PARK
3 rows selected.