2012-11-28 3 views
0

공통 테이블 식을 사용하여 T-SQL에서 마술을 할 수 있지만 DB2 9.7에서 어떻게 수행 할 수 있습니까?첫 번째 행을 선택하고 IBM DB2 9.7에서 업데이트하는 방법

1. select the first row in a table 
2. Update that specific row 

두 단계는 하나의 트랜잭션 내에서 수행되어야합니다. 제발 도와주세요 :)

+0

은 "처음 같은 건 없다 행 "을 관계형 데이터베이스의 테이블에 저장합니다. 데이터를 선택할 때 ORDER BY 절을 사용할 수 있지만, 그렇지 않은 경우에는 순서가 지정되지 않습니다. –

+0

확실한 경우 주문을 포함해야합니다. – user1340582

답변

1

커서를 반복 할 때 DB2에서 비슷한 것을 사용할 수 있습니다.

begin 
declare at_end sqlstate; 
declare name anchor emp.name; 
declare continue handler for not found 
    set at_end = TRUE; 
declare c cursor for 
    select tabname from emp 
    for update; 
open c; 
fetch c into name; 
if at_end <> TRUE then 
    update emp 
    set name = 'foo' 
    where current of c; 
end if; 
[email protected] 

이 코드는 선택에서 입수해온 첫 번째 행을 업데이트 할 것입니다 : 여기

은 예입니다.

이렇게하면 select 문을 발행 할 때 의도 업데이트 잠금이 만들어지고 업데이트 문에서 단독 잠금으로 변환됩니다. 따라서 일단 select가 완료되면 다른 트랜잭션이 행을 수정할 수 없습니다.

3

CTE 나 커서가 필요 없습니다! 간단히 전체 선택으로 행을 반환합니다 쿼리를 정의하고, 그 위에 업데이트를 실행하여 DB2 리눅스/유닉스/윈도우에서 테스트

UPDATE (
    SELECT * 
    FROM schema.table 
    WHERE thing1 = 'blah' 
     AND thing2 = 'something' 
    ORDER BY key 
    FETCH FIRST ROW ONLY 
) 
SET thing3 = 'updated' 

을 9.7

관련 문제