sequence 와 union all을 같이 사용 할 수 있나요? 0 6 7,920

by 웬쑤 [SQL Query] [2014.01.10 10:33:34]


INSERT INTO TEMP (COL1, COL2)
SELECT '1', SEQUENCE.NEXTVAL
FROM TEMP2
WHERE '1' = '1' -- 앞에 '1'은 화면에서 입력 받는 값
UNION ALL
SELECT '2', SEQUENCE.NEXTVAL
FROM TEMP2
WHERE '1' = '2' -- 앞에 '1'은 화면에서 입력 받는 값

이런 식으로 쿼리를 날리니
java.sql.SQLException: ORA-02287: 시퀀스 번호는 이 위치에 사용할 수 없습니다
이런 에러가 납니다.

UNION ALL 포함 아래 문장을 빼면 정상적으로 수행이 됩니다

SEQUENCE 사용 시 위와 같이 UNION ALL과 같이 사용할 수 있는 방법이 있을까요?
by 용근님 [2014.01.10 10:50:42]
INSERT INTO TEMP (COL1, COL2)
select a.*
       
, SEQUENCE.NEXTVAL 
  from  (
SELECT '1'

FROM TEMP2 
WHERE '1' = '1' -- 앞에 '1'은 화면에서 입력 받는 값
UNION ALL 
SELECT '2'
FROM TEMP2 
WHERE '1' = '2' -- 앞에 '1'은 화면에서 입력 받는 값 
) a

by 웬쑤 [2014.01.10 13:10:07]

답변 감사합니다 ^^

저런 식으로 풀어 가도 되는군요 ^^~


by feel [2014.01.10 10:50:52]

시퀀스에 대한 제약조건이 있네요...
1. 서브쿼리
2, view, materialized view query
3. distinct 연산자를 가지고 있는 select 문
4. group by , order by절을 가지고 있는 select 문
5. select 문의 조건절
6. create table, alter table 문에서 컬럼의 default값
7. check 제약조건의 조건
8. select 문이 union, intersect, minus 집합연산자를 가지는 다른 select 문과의 조합

-> 8번 제약조건에 해당하네요...
=> ps/sql로 변경해서 처리하기도 하네요...

by 웬쑤 [2014.01.10 13:10:43]
제약 조건이 있는거 처음 알았습니다

좋은 정보 감사합니다~^^

by 마농 [2014.01.10 11:15:52]
-- select '1' 과 select '2' 는 입력받은 값에 해당되므로
-- select '입력받은 값' 으로 하시면 Union All 안쓰고 한방에 될 듯 합니다만?
INSERT INTO TEMP (col1, col2)
SELECT :v col1
     , sequence.NEXTVAL col2
  FROM TEMP2 
 WHERE :v IN ('1', '2') -- 앞에 :v 는 화면에서 입력 받는 값
;

by 웬쑤 [2014.01.10 13:12:09]
이렇게 풀어나가도 되는군요 ^^ 감사합니다~^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입