2013-07-31 3 views
0

아래 쿼리 쿼리를 사용하여 일부 값을 설정하고 데이터 흐름을 제어합니다. 그러나 벨로우 쿼리를 실행할 때 condtion (하위 쿼리)에서 "값이 너무 깁니다"오류가 발생합니다.여러 행에 대한 쿼리 업데이트 문제

UPDATE MTB  ----- TABLE NAME 
SET MTB_EXTR_FLAG='N', 
MTB_ALOC_PROCESS='DC1' 
WHERE MTB_I IN  --- PRIMARY KEY 
(
SELECT * FROM 
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN 
FROM MTB 
) 
WHERE RN BETWEEN 100 AND 500 
) 

내 의도는 하나의 작업을 처리 할 때마다 다른 설정 데이터를 선택합니다. 다른 데이터 세트로 작업을 실행하기 전에 매번 MTB_EXTR_FLAG = 'N', MTB_ALOC_PROCESS = 'DC1'로 설정하려고합니다.

오류 문제를 해결하거나 다른 검색어를 제안 해 주실 수 있습니까?

감사합니다.

+1

rowid로 정렬하는 것이 현명하지 않습니다. - 테이블에서 다른 작업을 수행 할 때 rowid가 변경 될 수 있습니다. ROWID가 아닌 경우 어떻게 데이터 순위를 매 깁니까? 행이 생성 될 때까지 순위를 매기고 싶습니다. 표에 update_date 열이 있습니까? – haki

답변

1

나는이 그냥 일치하지 않는 컬럼의 수의 문제라고 생각합니다 (- MTB_IRN-2 대신 1 - MTB_I) :

UPDATE MTB  
SET MTB_EXTR_FLAG='N', 
MTB_ALOC_PROCESS='DC1' 
WHERE MTB_I IN  --- PRIMARY KEY 
(
SELECT MTB_I FROM -- Else RN will be taken !! 
(
SELECT MTB_I ,ROW_NUMBER() OVER (ORDER BY ROWID) AS RN 
FROM MTB 
) 
WHERE RN BETWEEN 100 AND 500 
) 

당신은 더 많은 필드를 반환 하위 쿼리와 where x in (...) 할 수 없습니다 예상보다.

+0

Emmanuel에게 감사드립니다. 이제 "select *"와 "Select MTB_I" – user2636867