2011-05-03 3 views
6

에 의해 DISTINCT, GROUP과보기에서 FOR UPDATE를 선택할 수 없습니다 나는 다음과 같은 쿼리를 사용하여 레코드 그룹을 잠글 :어떻게 ORA-02014를 해결하기 위해 :

select * 
    from (select * 
      from event_table 
     where status = 'S' 
     order by creation_data asc 
     ) 
where rownum <=10 
for update; 

event_table는 볼 수 없습니다입니다. 일반 테이블입니다.

create table event_table 
(
id   number, 
creation_date date, 
status  number, 
info   clob 
); 

기본 키는 필드 ID입니다.

rownumselect for update과 함께 사용할 수 있습니까?

select for update을 사용하는 다른 해결책이 있습니까? 또한 선택 항목의 모든 결과가 아닌 행 그룹 만 선택하고 있습니까?

예를 들어, 모든 X 내부를 실행하고 해당 테이블에 select for update을 사용해야하는 작업이 있지만 select가 500 행을 반환하면 매번 100 개 (페이징 종류)를 처리하려고합니다. 그래서 나는 rownum을 시도했다.

감사합니다.

+2

event_table는 볼 수 있지만'하지 않을 수 있습니다 (event_table SELECT * FROM을 ...)합니까'이 오류 메시지의 컨텍스트에서 "보기"입니다. –

답변

0

'event_table'은 무엇입니까? 'event_table'은 실제로 결과가 집계 (distinct, group by 등) 인보기와 같습니다. 업데이트를 위해 집계 된 결과를 준비 할 수 없습니다. 나는 100 % 확실하지는 않지만, rownum은 불확정이기 때문에 같은 효과를 낼 수 있습니다.

+0

내 질문이 업데이트되었습니다. tnx. – AmirT

10

이 일?

select * from event_table where id in 
(
    SELECT id 
    FROM (SELECT * 
     FROM event_table 
     WHERE status = 'S' 
     ORDER BY CREATION_DATA ASC) 
     WHERE ROWNUM <=10 
) 
FOR UPDATE; 
+0

글쎄, 쿼리가 성공했습니다. 행이 필요한만큼 잠겨 있는지 지금 확인해 보겠습니다. 고마워. – AmirT

관련 문제