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초마다 사라지지는 않을까요 ㅠㅠ
전반적으로 이상합니다.
1. 프로시저가 입력값을 받도록 작성되어 있는데 실행할때 입력값이 없네요?
2. sysdate 을 비교하고 있는데? 무슨 의도인지 모르겠네요?
입력값을 받는 것은 잘못한것같습니다. sysdate는 오늘 날짜가 되면 삭제를 하고싶어서 그렇게 했습니다 스케줄링으로 오늘날@ㅏ 오전12시에 실향을 시키고용 ...
sysdate 은 오늘(일자, 하루)을 뜻하는게 아닙니다.
sysdate 은 현재 시각( 년월일 시분초 ) 을 뜻합니다.
전반적으로 이상합니다.
답변감사합니다 그런데 프로시저를 이런식으로 수정하면
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
) 이런식을 선언하는 것이 아닌ㄴ가요 ㅜㅜㅜ
"ORA-06553: PLS-306: 'LEAVEMEMBER' 호출 시 인수의 갯수나 유형이 잘못되었습니다
" 그리고 스케줄링을 실행하면 이런 오류가 나는데 입력밧을 받아서 그런가요 ㅜㅜ
에러는 호출할 때 나는 것인데? 호출하는 구문은 안올려 주셨네요.
호출하는 구문에 두개의 입력값이 입력되어야 합니다.
그리고 IF 문에서 date type 과 문자열을 비교하네요. 비교 하는 양쪽의 형식이 같아야 합니다.
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');
스케줄링에서 이런식으로 실행하였습니다. ㅜㅜ
입력값 두개가 없네요. 프로시져명(입력값1, 입력값2)