这个存储过程编译后提示是正确的,但用Execute show_dept 来执行它,确什么提示都没有,请问在那里有错误?  create or replace procedure show_dept
  as
  a1 NUMBER ;
  o varchar(20);
  begin
  FOR a1 IN 1..3 LOOP
    select dname into o from scott.dept where deptno = a1;
    dbms_output.put_line(o);
  END LOOP;
  end;

解决方案 »

  1.   

    要先执行  set serveroutput on;
      

  2.   

    set serveroutput on;
    show show_dept();是用的这个来执行的,但是还是什么都没有。
      

  3.   


    set serveroutput on;
    exec show_dept;
      

  4.   

    还是没有输出的话,
    就是scott.dept这个表没deptno=1,2,3的数据了.
      

  5.   

    恩,确实是这样,不过执行后又出现这个错误,这个表是oracle自带的scott.dept表,没有做任何修改,但是执行了这个存储过程后,好像只有第一条记录的dname找到。这个存储过程的FOR a1 IN 1..3 LOOP语句,相对应dept表应该是FOR a1 IN 10..30 LOOP,但还是出现如下这个错误。在行 1 上开始执行命令时出错:
    execute show_dept;
    错误报告:
    ORA-01403: 未找到任何数据
    ORA-06512: 在 "SYS.SHOW_DEPT", line 7
    ORA-06512: 在 line 1
    01403. 00000 -  "no data found"
    *Cause:    
    *Action:
    ACCOUNTING
      

  6.   

    这是因为要把空数据into到变量o里.
      

  7.   

    不应该出现空数据啊,a1这个变量不是需要遍历10,20,30这三个deptid吗?但scott.dept这个表里确有这三个值的啊?
      

  8.   

    ---数据库自带的DEPT 里面没有部门为1,2,3的create or replace procedure show_dept
      as
      a1 NUMBER ;
      o varchar(20);
      begin
      FOR a1 IN 1..3 LOOP
    begin
      select dname into o from scott.dept where deptno = a1;
      dbms_output.put_line(o);
      when no_data_found then
      dbms_output.put_line('没有编码为'||a1||此部门');
    end;
      END LOOP;
    exception 
      when others then
    dbms_output.put_line(sqlcode||' '||sqlerrm);  end;