안녕하세요~ 특정 결과를 여러테이블의 where 조건에 적용하여
삭제 하려 합니다! 예를들면 아래와 같은 형식입니다;
아래의 쿼리를 하나로 만드는게 가능한지 싶어 질문드립니다
(혹시 tableXX는 3건 삭제, tableYY는 2건 삭제.. 등을 표시하려면 로직으로 해야겠지요?;;)
delete from tableXX
where no in (select no from tableAA where crdate <= 20150101);
delete from tableYY
where no in (select no from tableAA where crdate <= 20150101);
delete from tableZZ
where no in (select no from tableAA where crdate <= 20150101);
방법은 여러가지일수있음
이렇게해서 하단에 대상 테이블명만 입력해서 DELETE 스크립트는 만들수있을꺼같습니다.
select 'INSERT TABLE '||TABLE_NAME||' NOLOGGING;' ||CHR(10)||'INSERT /*+ APPEND */ INTO META_4N.'||TABLE_NAME||'('||WM_CONCAT(COLUMN_NAME) ||')'||CHR(10)
||'SELECT /*+ PARALLEL(A,8) */ '||WM_CONCAT(COLUMN_NAME)||' FROM '||'META_4.'||TABLE_NAME||' A;'||chr(10)
from user_tab_cols
where 1=1
아니면 동적쿼리로 처리하는방법도 있고요
CREATE OR REPLACE PROCEDURE p_delete(v_dt VARCHAR2) IS BEGIN DELETE FROM tableXX WHERE no IN (SELECT no FROM tableAA WHERE crdate <= v_dt); DBMS_OUTPUT.PUT_LINE('tableXX : ' || SQL%ROWCOUNT); DELETE FROM tableYY WHERE no IN (SELECT no FROM tableAA WHERE crdate <= v_dt); DBMS_OUTPUT.PUT_LINE('tableYY : ' || SQL%ROWCOUNT); DELETE FROM tableZZ WHERE no IN (SELECT no FROM tableAA WHERE crdate <= v_dt); DBMS_OUTPUT.PUT_LINE('tableZZ : ' || SQL%ROWCOUNT); END; /