본문 바로가기

Sql

insert, update 할때 subquery 사용시 SQL command not properly ended

INSERT 의 예

INSERT INTO TB_TABLE1

(COL1, COL2, COL3)

VALUES

('A', 'B', (SELECT NVL(MAX(A.COL10), 0) FROM TB_TABLE2 A) + 1  )

위에 보다시피 INSERT 항목 중 1개의 값을 SUB QUERY로 MAX값을 물고 온 다음에 NVL로 널 체크하고

+ 1을 해주는건 됌... 다만 인서트 시에 위에 빨간색 () 이게 없으면 에라...

 

UPDATE 의 예

UPDATE TB_TABLE1

COL1 = 'A',

COL2 = 'B',

COL3 = (SELECT NVL(MAX(A.COL10), 0) FROM TB_TABLE2 A) + 1

WHERE ...

당연히 INSERT에 사용되었던 SUB QUERY를 그대로 썼는데 UPDATE 할때는 에러가 뜸...

ORA-00933 : SQL command not properly ended

저게 무슨 에러냐면... 문장의 끝이 잘못 맺어졌다 대충 그런 뜻인데,

보통은 괄호를 열고 괄호를 제대로 안닫았거나, C 문법으로 치면 ; 세미콜론 빠뜨리거나 뭐 그런거인데

이유는 모르겠지만, 그리고 원래 저런거겠지만, 나중에 또 까먹을까봐...

(SELECT NVL(MAX(A.COL10), 0) + 1 FROM TB_TABLE2 A)

똑같은 UPDATE 그냥 저렇게 +1 해서 해결했음... 진작에 저렇게 하면 되는거긴 한데

암튼 UPDATE에 SUB QUERY 사용할 때 괄호 잘 확인해야 한다는거...

까먹지 맙시다.