programing

하위 쿼리 팩터링이 있는 Oracle DELETE 문

abcjava 2023. 8. 14. 22:24
반응형

하위 쿼리 팩터링이 있는 Oracle DELETE 문

SQL Server에서 작동하는 작업:

WITH X AS (), Y AS (), Z AS ()
DELETE FROM TBL
WHERE TBL.ID IN (SELECT ID FROM Z);

이 기능은 Oracle에서 작동합니다.

WITH X AS (), Y AS (), Z AS ()
SELECT * FROM TBL
WHERE TBL.ID IN (SELECT ID FROM Z);

그러나 DELETE는 그렇지 않습니다: ORA-00928: SELECT 키워드 누락

제 하위 쿼리가 상당히 큰데, 이 작업을 수행하기 위한 다른 구문이 있습니까?

SELECT 문 이외에는 하위 쿼리 팩터링/CTE를 사용할 수 없습니다.설명서에서 다음을 참조하십시오.

이 절은 모든 최상위 SELECT 문 및 대부분의 하위 쿼리 유형에서 지정할 수 있습니다.

다음과 같이 할 수 있습니다.

DELETE FROM tbl WHERE tbl.id IN
(WITH X AS (), Y AS (), Z AS ()
SELECT id FROM TBL
 WHERE TBL.ID IN (SELECT ID FROM Z));

이 작업을 수행하게 되었습니다(SQL Server에서는 작동하지 않습니다.

DELETE FROM TBL
WHERE TBL.ID IN (
    WITH X AS (), Y AS (), Z AS ()
    SELECT ID FROM Z
);

최소한 모든 별칭 쿼리를 FROM 문에 표시해야 합니다.더 많은 문제가 있는지는 모르겠지만, 그것은 필수입니다(그리고 00928은 그렇지 않을 때 발생하는 오류라고 생각합니다).

언급URL : https://stackoverflow.com/questions/6603171/oracle-delete-statement-with-subquery-factoring

반응형