스케줄링 질문 0 8 2,421

by GKDLDYD [2023.01.25 18:42:36]


--프로시저

create or REPLACE PROCEDURE leavemember
(   
    mu_idx in number,
    mnickname in NVARCHAR2,
    mleave_date in date,
    mgithub_url NVARCHAR2,
    mprofilephoto NVARCHAR2
  
)
as 
begin

if mleave_date = sysdate
then
delete from  member where u_idx =mu_idx; 
delete from user_detail where u_idx =mu_idx;
end if;
commit;
end

-스케줄링

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => 'sleavemember',
            job_type => 'PLSQL_BLOCK',
            job_action => 'BEGIN leavemember; END;',
            start_date => systimestamp ,
            repeat_interval => 'FREQ=secondly; interval=1'
            --repeat_interval => 'sysdate+7+1/86400'
           );

    end;

EXECUTE DBMS_SCHEDULER.ENABLE('sleavemember');
  EXECUTE DBMS_SCHEDULER.DISABLE('sleavemember');

이렇게 만들어봤는데 모드 생성은 되는데 왜  데이터가 1초마다 사라지지는 않을까요 ㅠㅠ

by 마농 [2023.01.26 09:47:56]

전반적으로 이상합니다.
1. 프로시저가 입력값을 받도록 작성되어 있는데 실행할때 입력값이 없네요?
2. sysdate 을 비교하고 있는데? 무슨 의도인지 모르겠네요?


by GKDLDYD [2023.01.26 10:19:01]

입력값을 받는 것은 잘못한것같습니다. sysdate는 오늘 날짜가 되면 삭제를 하고싶어서 그렇게 했습니다 스케줄링으로 오늘날@ㅏ 오전12시에 실향을 시키고용 ...


by 마농 [2023.01.26 10:30:30]

sysdate 은 오늘(일자, 하루)을 뜻하는게 아닙니다.
sysdate 은 현재 시각( 년월일 시분초 ) 을 뜻합니다.
전반적으로 이상합니다.


by GKDLDYD [2023.01.26 11:04:27]

답변감사합니다 그런데  프로시저를 이런식으로 수정하면 

create or REPLACE PROCEDURE leavemember
(   
    mu_idx  number,
    mleave_date  date
  
  
)
as 
begin
if mleave_date = to_char(sysdate,'YY/MM/DD')
then
delete from  member where u_idx = mu_idx; 
delete from user_detail where u_idx = mu_idx;
end if;
commit;
end;

입력값을 받는 걸까요 ?? 그리고 u_idx 가 해당하는 값만 삭제하고 싶은데 (   
    mu_idx  number,
    mleave_date  date
  
  
) 이런식을 선언하는 것이 아닌ㄴ가요 ㅜㅜㅜ


by GKDLDYD [2023.01.26 11:05:33]

"ORA-06553: PLS-306: 'LEAVEMEMBER' 호출 시 인수의 갯수나 유형이 잘못되었습니다
" 그리고 스케줄링을 실행하면 이런 오류가 나는데 입력밧을 받아서 그런가요 ㅜㅜ


by 마농 [2023.01.26 11:11:08]

에러는 호출할 때 나는 것인데? 호출하는 구문은 안올려 주셨네요.
호출하는 구문에 두개의 입력값이 입력되어야 합니다.
그리고 IF 문에서 date type 과 문자열을 비교하네요. 비교 하는 양쪽의 형식이 같아야 합니다.


by GKDLDYD [2023.01.26 11:21:38]

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => 'sleavemember',
            job_type => 'STORED_PROCEDURE',
            job_action => 'ADMIN.LEAVEMEMBER',
         start_date => systimestamp,
           -- repeat_interval => 'TRUNC(SYSDATE+1)' 
           repeat_interval =>  'FREQ=secondly; INTERVAL=1'
           );
           SYS.DBMS_OUTPUT.PUT_LINE('Job Number is : ' || to_char(10));
    end;


select *  from member;

 EXECUTE DBMS_SCHEDULER.ENABLE('sleavemember');


  EXECUTE DBMS_SCHEDULER.DISABLE('sleavemember');

스케줄링에서 이런식으로 실행하였습니다. ㅜㅜ


by 마농 [2023.01.26 11:28:30]

입력값 두개가 없네요. 프로시져명(입력값1, 입력값2)

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