首先创建过程,可以成功创建没有报错:
--创建过程
create or replace procedure job_proc_pointRecord_update is
recRow T_C_POINT_RECORD%ROWTYPE;
oldPoint T_C_POINT.TOTAL_POINT%TYPE;
begin
--定义游标
DECLARE CURSOR recordCusor IS select record_id, point_id, transaction_type, change_time, merchant_name, commodity_name, change_point, change_remark, order_id, change_type, user_id, user_name, transaction_money, transaction_state, operative_time
from t_c_point_record
where TRANSACTION_STATE=1 and to_char(to_date(operative_time,'yyyy-mm-dd hh:mi:ss'),'dd')=to_char(sysdate,'dd');
--开始使用游标取数据
BEGIN
OPEN recordCusor;
LOOP
FETCH recordCusor INTO recRow;
--游标取不到数据则退出
EXIT WHEN recordCusor%NOTFOUND;
if recRow.CHANGE_TYPE=1 then --积分增加
update t_c_point set TOTAL_POINT=TOTAL_POINT+recRow.CHANGE_POINT;
update T_C_CUST_INFO set TOTAL_POINT = TOTAL_POINT + recRow.CHANGE_POINT where cust_id=recRow.USER_ID;
else --积分减少
select TOTAL_POINT into oldPoint from t_c_point where POINT_ID = recRow.POINT_ID;
if oldPoint-recRow.CHANGE_POINT>=0 then --如果够减
update t_c_point set TOTAL_POINT=TOTAL_POINT-recRow.CHANGE_POINT,CONSUME_POINT=CONSUME_POINT+recRow.CHANGE_POINT,INEFFECTIVE_POINT=INEFFECTIVE_POINT-recRow.CHANGE_POINT where POINT_ID = recRow.POINT_ID;
update T_C_CUST_INFO set TOTAL_POINT = TOTAL_POINT - recRow.CHANGE_POINT,CONSUME_POINT = CONSUME_POINT + recRow.CHANGE_POINT where cust_id=recRow.USER_ID;
else --不够减直接设置为0
update t_c_point set TOTAL_POINT=0,CONSUME_POINT=CONSUME_POINT+recRow.CHANGE_POINT,INEFFECTIVE_POINT=INEFFECTIVE_POINT-recRow.CHANGE_POINT where POINT_ID = recRow.POINT_ID;
update T_C_CUST_INFO set TOTAL_POINT = 0,CONSUME_POINT = CONSUME_POINT + recRow.CHANGE_POINT where cust_id=recRow.USER_ID;
end if;
end if;
--设置交易状态为2:已生效
update t_c_point_record set transaction_state=2 where record_id=recRow.record_id;
END LOOP;
CLOSE recordCusor;
END;
--提交
COMMIT;
EXCEPTION
ROLLBACK;
end job_proc_pointRecord_update;
然后创建定时任务,执行的时候报错了:
--创建定时器
declare
job number;
begin
dbms_job.submit(job, 'job_proc_pointRecord_update', sysdate, 'TRUNC(sysdate)+1+2/(24)');
end;
报错信息:
请大家帮忙看下,万分感谢!
10 个解决方案
#1
创建成功不代表代码准确,show error看看有没有错误,或者用plsql重新编译一下就知道哪里报错了
#2
-- 存储过程后面,写一个分号
declare
job number;
begin
dbms_job.submit(job, 'job_proc_pointRecord_update;', sysdate, 'TRUNC(sysdate)+1+2/(24)');
end;
#3
又报了另外一个错误 ,麻烦帮忙看一下
#4
这个问题,是存储过程没有编译通过。
你用 plsql 这类工具看看,把这个过 程再改改;
你用 plsql 这类工具看看,把这个过 程再改改;
#5
不好意思,我刚学ORACLE,这个错误我找到了 还麻烦您帮我解释一下,我不懂这要怎么改。
#6
上面发错图了,是这个:
#7
EXCEPTION
ROLLBACK;
EXCEPTION
when others then -- 加这句
ROLLBACK;
#8
存储过程本身编译不通过。
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止
#9
谢谢大大!问题解决了。谢谢!
#10
谢谢大大!问题解决了。谢谢!
#1
创建成功不代表代码准确,show error看看有没有错误,或者用plsql重新编译一下就知道哪里报错了
#2
-- 存储过程后面,写一个分号
declare
job number;
begin
dbms_job.submit(job, 'job_proc_pointRecord_update;', sysdate, 'TRUNC(sysdate)+1+2/(24)');
end;
#3
又报了另外一个错误 ,麻烦帮忙看一下
#4
这个问题,是存储过程没有编译通过。
你用 plsql 这类工具看看,把这个过 程再改改;
你用 plsql 这类工具看看,把这个过 程再改改;
#5
不好意思,我刚学ORACLE,这个错误我找到了 还麻烦您帮我解释一下,我不懂这要怎么改。
#6
上面发错图了,是这个:
#7
EXCEPTION
ROLLBACK;
EXCEPTION
when others then -- 加这句
ROLLBACK;
#8
存储过程本身编译不通过。
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止
#9
谢谢大大!问题解决了。谢谢!
#10
谢谢大大!问题解决了。谢谢!