여러 테이블들을 끌어와서 새로운 데이터셋을 만들어야 할 일이 생겼다.
A에서는 조건에 맞는 고객ID를 가져오고, B에선 A에서 뽑은 고객 ID를 기반으로 고객 등급을 가져와서 A,B에서 가져온걸 C에 붙이려고 했다. 이 방법이 맞는지는 모르겠지만 어쨌든 A,B를 합친 AB테이블과 C를 조인하고 그 테이블을 저장해서 사용하려고 했다.
그리고 그 AB를 만들 때 With 구문을 사용했다.
위에서는 한번만 적었지만 상당히(..) 참조해야 할 테이블 수도 많았고 고객ID를 기반으로 해야 할 일이 많았기 때문이다.
테이블을 만들어야하니 CREATE를 이용했고,
CREATE TABLE EXAMPLE_TABLE AS (
WITH CLIST AS (SELECT A.CID FROM A WHERE 조건),
CSTATUS AS (SELECT * FROM B WHERE EXISTS (SELECT * FROM CLIST WHERE CLIST.CID = B.CID) )
SELECT * FROM C
LEFT OUTER JOIN CSTATUS
ON CSTATUS.CID = C.CID
)
대략적으로 이런 식으로 적었다.
사실 CREATE구문 안쪽의 WITH와 SELECT문이 정상적으로 작동이 되기 때문에 바로 잘 될 줄 알았는데
띠용

ORA-32034 : 지원되지 않는 WITH 절 사용
이라는 오류가 났다.
나...WITH절 써서 잘 조회 되는거 확인했는데 뭐지..?
알고보니 CREATE TABLE EXAMPLE_TABLE AS 뒤의 괄호가 문제였다
CREATE TABLE EXAMPLE_TABLE AS
WITH CLIST AS (SELECT A.CID FROM A WHERE 조건),
CSTATUS AS (SELECT * FROM B WHERE EXISTS (SELECT * FROM CLIST WHERE CLIST.CID = B.CID) )
SELECT * FROM C
LEFT OUTER JOIN CSTATUS
ON CSTATUS.CID = C.CID
이렇게 내부 쿼리를 묶어주는 괄호를 없애니 잘 돌아갔다.
쿼리 짜다보면 항상 괄호가 헷갈리는데 (닫았는지 안닫았는지)
오류를 검색해보니 이렇게 하면 돌아갈거예요~ 이런 답변들 보면서 뭐가 달라진거지 했는데 괄호가 문제였다.
여기서도 괄호가 눈에 잘 안들어오긴하지만...
전체를 묶는!!! CREATE TABLE AS 구문을 묶는!!! 괄호 삭제하고 돌려보라!! 가 결론입니다
'DBMS > Oracle' 카테고리의 다른 글
[ORACLE] date type 에서 null 입력이 안되는 경우 (0) | 2022.08.08 |
---|