모든 유저 지우기! 스크립트를 만들었습니다. 그런데... 0 5 2,840

by 김선호 drop user 유저 삭제 [2008.12.08 10:42:59]


DECLARE
 sqltext VARCHAR2(4000);
BEGIN
 SELECT  ’drop user ’ ||username ||’ cascade;’
 INTO  sqltext
 FROM  all_users
 where user_id >= 32;
 
 EXECUTE IMMEDIATE sqltext;
 
 
 EXCEPTION
    WHEN OTHERS THEN
 
    DBMS_OUTPUT.PUT_LINE(’작업실패’);
END;

했더니 Executed Successfully
라고 뜨길래

’아쌉, 역쉬 이정돈 되야~’ 하며 확인했는데 drop이 안되어 있는겁니다 -_ -

확인해보니 server output 이 ’작업실패’ 두둥... ㅡ,.ㅡ

이곳저곳 로그를 붙여 확인해봤는데

where user_id >= 32; 와 EXECUTE IMMEDIATE sqltext; 사이에서

exception 이 나는것 같아요.

그런데 어떤 오류 메시지가 나오면 확인해서 고쳐볼텐데.. 이거는 뭐 메시지(ora-XXXX)도 안나오고 당췌 어떤이유인지..

쿼리만 돌려서 나온 결과를 붙여넣어 실행해 봤는데 쿼리는 잘돌아갑니다 -_ -

execute immediate 에 문제가 있는 건지...? 도움좀 주십시오~ 굽신굽신 (/- _-)/

by 웅 [2008.12.08 10:52:39]
select 할때 여러 건이 리턴되어서 그렇습니다.
into 절로 받을 수 있는 갓은 단일행 리턴일경우에만 허용되죠.
cursor나 for loop로 한건식 패치해서 처리해보세요.

by 마농 [2008.12.08 10:53:04]
select into 문은 1행만 처리합니다. 0행또는 2행이상은 무조건 에러입니다.
여러행 처리시엔 커서를 사용하여 루프를 돌리셔야 합니다.
http://www.gurubee.net/lecture/1065
http://www.gurubee.net/lecture/1065

by 현 [2008.12.08 11:04:51]
근데요,
어차피 1회성 작업이시라면
굳이 저렇게 하지 마시고,
쿼리 돌려서 나온 결과를 그냥 sql plus에서 돌리시면 되지 않을까요?

저는 이런 작업일 경우 윈도우에서 bat 파일을 만들어서 돌립니다.spool을 만들어서요...

by 웅 [2008.12.08 11:33:27]
처음 저도 그런뜻으로 아래 질문에서 쿼리를 작성해본거였는데...^^;;

by 김선호 [2008.12.09 13:20:23]
실행해서 나온 스크립트 돌려서 하긴 했는데 다른방법은 없을까? 하고 질문했던거에요 ㅋ
답변 감사합니다! for사용해서 해봐야겠네요 ㅎㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입