看看有什么问题
--存储过程
create or replace procedure tk_days_add (
resultStr out char,
v_vlt_id in CHAR
) is
Begin
update Ticket set tk_days=tk_days+1 where vlt_id=v_vlt_id;
ResultStr := 'success: 执行成功.';
End;
--定时器
DECLARE
unlockTest_timer number;
BEGIN
SYS.DBMS_JOB.SUBMIT(
job => unlockTest_timer,
what => 'tk_days_add;',
next_date => SYSDATE,
interval => 'sysdate+1/(24*60)');
Commit;
End;
Interval => 'TRUNC(sysdate,''mi'') + 1 / (24*60)' 这样试试呢,sysdate是时间型,直接做加法会出错
你存储过程要求传入两个参数,但是job的what里面又没传,当然会报错了,要改成下面这样
DECLARE
unlockTest_timer number;
BEGIN
SYS.DBMS_JOB.SUBMIT(
job => unlockTest_timer,
what => 'declare
resultStr char;
v_vlt_id CHAR;
begin
tk_days_add(resultStr,v_vlt_id);
end;',
next_date => SYSDATE,
interval => 'sysdate+1/(24*60)');
Commit;
End;
这个与时间类型加减没关系,oracle的date类型本就可以加减,sysdate+1表示当前时间加1天
提示对象无效
你回复的这个一眼就能看出错误呀,你没有声明ResultStr这个变量,怎么能给它赋值呢?而且你这个赋值本身没有任何意义呀,既不打印又不输出,为什么不删掉这一行呢?
create or replace procedure tk_days_add (
v_vlt_id in CHAR
) is
Begin
update Ticket set tk_days=tk_days+1 where vlt_id=v_vlt_id;
End;
上面这个语法就没错了,就是不知道你表名和字段名是不是对的,
而且,你这个job其实执行其实也没有任何意义,传个空值进去做where 的等于条件,永远都更新不到数据。
建议你再想一想你创建定时任务是为了做什么?是否真的需要外部参数?如果需要外部参数,那参数的值获得的逻辑是什么?