首页 » Oracle » oracle执行存储过程报错:ORA-12011

oracle执行存储过程报错:ORA-12011

原文 http://blog.csdn.net/fodaorujia/article/details/76169082

2017-07-27 10:20:13阅读(611)

执行定时任务时报错:



<a href=oracle执行存储过程报错:ORA-12011" src="http://img.blog.csdn.net/20170727091227855?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9kYW9ydWppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">


不一定是权限问题,但肯定是存储过程执行的问题。
我的存储过程带参数,我用测试存储过程的代码放入了job的what值,eg:proc_update_tag_cor_id(v_cor=>:v_cor
                                                         v_tag=>:v_tag
);


执行时没有传入参数值,所以执行不通过。

修改存储过程后(存储过程内部参数可以定义在执行过程中),就可以了

附:

我的存储过程代码:

原来的:

create or replace procedure proc_update_tag_cor_id(
       c_course out sys_refcursor,
       v_tag_id in out edc_tag_course.id%type,
       v_cor_id in out edc_course.id%type) 
       AUTHID CURRENT_USER
       is
begin
    --查询“最新上市”tag的id
    select t.id into v_tag_id from edc_tag_course t where t.tag_name = '最新上市';
    
    if v_tag_id is null then
       dbms_output.put_line('“最新上市”标签不存在');
      return;
    else
       dbms_output.put_line('“最新上市”tagId is: '|| v_tag_id);
    end if ;
    --删除关联的最新课程
    delete from ( select * from edc_tag_course_id where tag_id= v_tag_id);
     --打开游标,获得最新课程的结果集
     open c_course for
     select t.id from (select id from edc_course order by create_time desc ) t where rownum <=5;
     --提取游标值
     fetch c_course into v_cor_id;


     while c_course %found loop
           dbms_output.put_line('new courses id is: '|| v_cor_id);
           insert into edc_tag_course_id values(sys_guid(),v_cor_id,v_tag_id);
     fetch c_course into v_cor_id;
     end loop;
     --关闭游标
     close c_course;
commit;
end proc_update_tag_cor_id;

现在的:

create or replace procedure proc_update_tag_cor_id
       AUTHID CURRENT_USER
       is
       
       c_course  sys_refcursor;
       v_tag_id  edc_tag_course.id%type;
       v_cor_id  edc_course.id%type;
begin
    --查询“最新上市”tag的id
    select t.id into v_tag_id from edc_tag_course t where t.tag_name = '最新上市';
    
    if v_tag_id is null then
       dbms_output.put_line('“最新上市”标签不存在');
      return;
    else
       dbms_output.put_line('“最新上市”tagId is: '|| v_tag_id);
    end if ;
    --删除关联的最新课程
    delete from ( select * from edc_tag_course_id where tag_id= v_tag_id);
     --打开游标,获得最新课程的结果集
     open c_course for
     select t.id from (select id from edc_course order by create_time desc ) t where rownum <=5;
     --提取游标值
     fetch c_course into v_cor_id;


     while c_course %found loop
           dbms_output.put_line('new courses id is: '|| v_cor_id);
           insert into edc_tag_course_id values(sys_guid(),v_cor_id,v_tag_id);
     fetch c_course into v_cor_id;
     end loop;
     --关闭游标
     close c_course;
commit;
end proc_update_tag_cor_id;



最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹