with AS400에서 DB2-SQL 삭제 상위 N을 수행하는 방법



db2 with 절 (3)

SELECT * FROM DB FETCH 100 ROW ONLY ->는 정상입니다.

delete from DB FETCH 100 ROW ONLY -> 왜 안 delete from DB FETCH 100 ROW ONLY ?


Answer #1

이것을 시도 할 수 있습니다 : -

DELETE FROM (SELECT * FROM DB FETCH 100 ROWS ONLY) 

편집하다:-

이것을 시도 할 수 있습니다 : -

DELETE FROM (SELECT * FROM "BACKUPLIB/SCDKISLOG3" FETCH 100 ROWS ONLY)

Answer #2

이 양식 사용 :

delete from mytable a where rrn(a) in 
(select rrn(b) from mytable b fetch first 100 rows only)

{delete from (select ...}) 형식은 사용할 수 없습니다. 테이블 함수는 DELETE가 아닌 subselect에서만 유효합니다.


Answer #3

첫 번째 xxx 행 만 FETCH

기본적으로 전체 결과 집합이 필요하지 않은 경우 성능 바로 가기입니다. 설명서에 의하면 :

select 문에서 fetch-first-clause을 지정하면 결과 테이블이 읽기 전용이됩니다. 읽기 전용 결과 테이블은 UPDATE 또는 DELETE 문에서 참조되어서는 안됩니다. fetch-first-clause은 UPDATE 절을 포함하는 명령문에 나타날 수 없습니다.

이것은 효과가있다.

DELETE FROM mytbl
WHERE pk IN (SELECT pk FROM mytbl
             FETCH FIRST 100 ROWS ONLY
            )




delete-row