ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

时间:2021-04-06 07:45:12
   

  首先创建过程,可以成功创建没有报错:

--创建过程
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;


      报错信息:
ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

请大家帮忙看下,万分感谢!

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


引用 2 楼 wmxcn2000 的回复:
-- 存储过程后面,写一个分号
declare
  job number;
begin
  dbms_job.submit(job, 'job_proc_pointRecord_update;', sysdate, 'TRUNC(sysdate)+1+2/(24)');
end;


又报了另外一个错误 ,麻烦帮忙看一下
ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

#4


这个问题,是存储过程没有编译通过。

你用 plsql 这类工具看看,把这个过 程再改改;

#5


引用 4 楼 wmxcn2000 的回复:
这个问题,是存储过程没有编译通过。

你用 plsql 这类工具看看,把这个过 程再改改;


不好意思,我刚学ORACLE,这个错误我找到了   还麻烦您帮我解释一下,我不懂这要怎么改。
ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

#6


引用 4 楼 wmxcn2000 的回复:
这个问题,是存储过程没有编译通过。

你用 plsql 这类工具看看,把这个过 程再改改;


上面发错图了,是这个:

ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

#7


EXCEPTION
ROLLBACK;

EXCEPTION
when others then  -- 加这句
ROLLBACK;

#8


存储过程本身编译不通过。
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止

#9


引用 7 楼 wmxcn2000 的回复:
EXCEPTION
ROLLBACK;

EXCEPTION
when others then  -- 加这句
ROLLBACK;


谢谢大大!问题解决了。谢谢! 

#10


引用 8 楼 jdsnhan 的回复:
存储过程本身编译不通过。
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止


谢谢大大!问题解决了。谢谢! 

#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


引用 2 楼 wmxcn2000 的回复:
-- 存储过程后面,写一个分号
declare
  job number;
begin
  dbms_job.submit(job, 'job_proc_pointRecord_update;', sysdate, 'TRUNC(sysdate)+1+2/(24)');
end;


又报了另外一个错误 ,麻烦帮忙看一下
ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

#4


这个问题,是存储过程没有编译通过。

你用 plsql 这类工具看看,把这个过 程再改改;

#5


引用 4 楼 wmxcn2000 的回复:
这个问题,是存储过程没有编译通过。

你用 plsql 这类工具看看,把这个过 程再改改;


不好意思,我刚学ORACLE,这个错误我找到了   还麻烦您帮我解释一下,我不懂这要怎么改。
ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

#6


引用 4 楼 wmxcn2000 的回复:
这个问题,是存储过程没有编译通过。

你用 plsql 这类工具看看,把这个过 程再改改;


上面发错图了,是这个:

ORACLE创建存储过程和定时器出错,请大家帮忙看下,在线等。谢谢!

#7


EXCEPTION
ROLLBACK;

EXCEPTION
when others then  -- 加这句
ROLLBACK;

#8


存储过程本身编译不通过。
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止

#9


引用 7 楼 wmxcn2000 的回复:
EXCEPTION
ROLLBACK;

EXCEPTION
when others then  -- 加这句
ROLLBACK;


谢谢大大!问题解决了。谢谢! 

#10


引用 8 楼 jdsnhan 的回复:
存储过程本身编译不通过。
楼上指正了一点。再遇到错误,一点一点屏蔽,直到找到错误为止


谢谢大大!问题解决了。谢谢!