특정 sql결과로 나온 값을 조건으로 여러테이블 테이타 삭제 0 7 959

by SQL초보 [SQL Query] [2018.01.15 00:52:19]


안녕하세요~ 특정 결과를 여러테이블의 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);

by 부쉬맨 [2018.01.15 10:20:23]

프로시저에서 delete from 한건에 대해서 

rowcount로 잡아낼수있습니다. 그걸 dbmsout으로 찍어도되고 특정 이력테이블들어서 인서트해줘도되겟지요

 

질문이 저러한 delete 문장을 한번에 만들수있는게 첫번째이고

개수를 표기하고싶은게 두번째인가요???


by SQL초보 [2018.01.15 13:23:08]

네네~ delete를 한sql로 가능할까 싶어서요! 카운트는 돠면 좋은데 안되면 삭제 전union all 로 tb명, count(*) 로 뽑아놓고 로직에서 사용하고 delete문 돌리려구요! delete문도 한번에안되면 그냥 하나하나 돌려서 결과를 로직에서 카운트하려고 했습니다

 


by 우리집아찌 [2018.01.15 13:48:05]

한 SQL로 불가능합니다.

PL-SQL 사용하셔서 프로시져로 한방에 처리하세요.


by SQL초보 [2018.01.15 13:24:28]

삭제한 개수는 배치 로직에서 로그로 남기려구요~


by 부쉬맨 [2018.01.15 13:34:08]

방법은 여러가지일수있음

이렇게해서 하단에 대상 테이블명만 입력해서 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

 

아니면 동적쿼리로 처리하는방법도 있고요

 


by 마농 [2018.01.15 14:58:56]
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;
/

 


by SQL초보 [2018.01.15 22:25:41]

감사합니다~~ 문제해결에 여러접근방법이 있군요! 많은 도움이 되었습니다^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입