这是我建立的存储过程(已经编译通过):
create or replace procedure Scorestage(
Eunpassnum  out number,
Eoversixty  out number,
Eoversenventy  out number,
Eovereighty  out number,
Eoverninety out number,
punpassnum out number,
poversixty  out number,
poversenventy  out number,
povereighty  out number,
poverninety out number,
)
as
HEnglish number;
Hplitics number;
cursor Firststu_cursor is
select English,plitics from Firststudent;
begin
open Firststu_cursor;
loop
fetch Firststu_cursor into HEnglish,Hplitics;
exit when Firststu_cursor%notfound;
if HEnglish<60 then
Eunpassnum:=Eunpassnum+1;
end if;
if HEnglish>60 then
Eoversixty:=Eoversixty+1;
end if;
if HEnglish>70 then
Eoversenventy:=Eoversenventy+1;
end if;
if HEnglish>80 then  
Eovereighty:=Eovereighty+1;
end if;
if HEnglish>90 then 
Eoverninety:=Eoverninety+1;
end if;
if Hplitics<60 then
punpassnum:=punpassnum+1;
end if;
if Hplitics>60 then
poversixty:=poversixty+1;
end if;
if Hplitics>70 then
poversenventy:=poversenventy+1;
end if;
if Hplitics>80 then  
povereighty:=povereighty+1;
end if;
if Hplitics>90 then 
poverninety:=poverninety+1;
end if;
end loop;
close Firststu_cursor;
end scorestage;下面是在Java调用:
try{

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
    catch(ClassNotFoundException e){}                 int  Eunpassnum =0,Eoversixty=0 ,Eoversenventy =0 ,Eovereighty =0,Eoverninety=0 ;
 int  punpassnum=0 ,poversixty =0 ,poversenventy =0,povereighty =0,poverninety=0;

 try{   con=DriverManager.getConnection("jdbc:odbc:hello","system","system");

String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";

CallableStatement proc =con.prepareCall(call);

proc.setInt(1,Eunpassnum);

proc.setInt(2,Eoversixty);

proc.setInt(3,Eoversenventy);
proc.setInt(4,Eovereighty);
proc.setInt(5,Eoverninety);

proc.setInt(6,punpassnum);
proc.setInt(7,poversixty);
proc.setInt(8,poversenventy);
proc.setInt(9,povereighty);
proc.setInt(10,poverninety);


proc.registerOutParameter(10,java.sql.Types.INTEGER);
       proc.execute();

  con.close();
 }
 catch(SQLException e)
 {System.out.println(e);}
         String Eun=String.valueOf(Eunpassnum),Esix=String.valueOf(Eoversixty),
              Ese=String.valueOf(Eoversenventy),Eei=String.valueOf(Eovereighty),
                      Eni=String.valueOf(Eoverninety);

String pun=String.valueOf(punpassnum),psix=String.valueOf(poversixty),
       pse=String.valueOf(poversenventy),pei=String.valueOf(povereighty),
       pni=String.valueOf(poverninety);
      text1.setText(Eun);
  text2.setText(Esix);
  text3.setText(Ese);
  text4.setText(Eei);
  text5.setText(Eni);
  
  text6.setText(pun);
  text7.setText(psix);;
  text8.setText(pse);
  text9.setText(pei);
  text10.setText(pni);结果在图形界面输出时:文本框中全是 0,全是0.
好像是参数没有传递过来,已经在这个地方编了好几天了,
若高手帮忙解答,必有重分!!!

解决方案 »

  1.   

    你看看在PL/SQL中调试的时候你的那些参数的值是多少
      

  2.   

    参数的值,什么意思!我就只是写了一个存储过程,然后就在java中调用啊
    我只是想把Eunpassnum,Eoversixty等参数传回到java的调用环境中去,用于图形界面输出
      

  3.   

    你在PL/SQL中调试过吗??不是按F8那个是用test,在界面的下方会把你的out参数的值输出
      

  4.   

    你的存储过程中的参数全是out型的,要想获得存储过程执行完后这些参数的值,需要注册一下
    callableStatement.registerOutParameter(2,Types.INTEGER);---每个参数都要注册
    int outParam=callableStatement.getInt(2);-----然后这样获得就行了下边是我前几天刚写的方法:存储过程里又两个参数,第一个是in型的,第二个是out型的,需要注册,参考下吧
    /**
     * 生成合同号
     * @param appno    合同审核子流程的业务申请号
     * @param conn     数据库连接
     * @throws Exception   
     */
    public void generateContractCode(String appno,Connection conn)throws Exception{
    try{
    String call="{call pkg_tms_contract_manage.GENERATE_CONTRACT_CODE(?,?)}";
    CallableStatement callableStatement=conn.prepareCall(call);
    callableStatement.setString(1, appno);
    callableStatement.registerOutParameter(2,Types.VARCHAR);
    callableStatement.execute();
    String error=callableStatement.getString(2);
    if(error!=null&&!"".equals(error)){
    throw new Exception(error);
    }
    }catch(Exception e){
    throw e;
    }
    }
      

  5.   

    proc.registerOutParameter(10,java.sql.Types.INTEGER); --只有第10个参数注册了,注册后,也没有为它重新赋值poverninety=callableStatement.getInt(10);
    然后在system.out(poverninety)试试
      

  6.   

    create or replace procedure Scorestage(
      Eunpassnum  out number, 
      Eoversixty  out number, 
      Eoversenventy  out number, 
      Eovereighty  out number, 
      Eoverninety out number, 
      punpassnum out number, 
      poversixty  out number, 
      poversenventy  out number, 
      povereighty  out number, 
      poverninety out number) 
    as 
      HEnglish number; 
      Hplitics number; 
      cursor Firststu_cursor is select English,plitics from Firststudent; 
    begin 
      Eunpassnum:=0; 
      Eoversixty:=0; 
      Eoversenventy:=0; 
      Eovereighty:=0; 
      Eoverninety:=0; 
      punpassnum:=0; 
      poversixty:=0; 
      poversenventy:=0; 
      povereighty:=0; 
      poverninety:=0; 
      open Firststu_cursor; 
      loop 
        fetch Firststu_cursor into HEnglish,Hplitics; 
        exit when Firststu_cursor%notfound; 
        if HEnglish <60 then 
          Eunpassnum:=Eunpassnum+1; 
        end if; 
        if HEnglish>60 then 
          Eoversixty:=Eoversixty+1; 
        end if; 
        if HEnglish>70 then 
          Eoversenventy:=Eoversenventy+1; 
        end if; 
        if HEnglish>80 then  
          Eovereighty:=Eovereighty+1; 
        end if; 
        if HEnglish>90 then 
          Eoverninety:=Eoverninety+1; 
        end if; 
        if Hplitics <60 then 
          punpassnum:=punpassnum+1; 
        end if; 
        if Hplitics>60 then 
          poversixty:=poversixty+1; 
        end if; 
        if Hplitics>70 then 
          poversenventy:=poversenventy+1; 
        end if; 
        if Hplitics>80 then  
          povereighty:=povereighty+1; 
        end if; 
        if Hplitics>90 then 
          poverninety:=poverninety+1; 
        end if; 
      end loop; 
      close Firststu_cursor; 
    end scorestage;在sqlplus中调用一下,看看运行结果
    SQL> ed
    已写入 file afiedt.buf  1   declare
      2     eunpassnum number;
      3     Eoversixty number;
      4     Eoversenventy number;
      5     Eovereighty number;
      6     Eoverninety number;
      7     punpassnum number;
      8     poversixty number;
      9     poversenventy number;
     10     povereighty number;
     11     poverninety number;
     12   begin
     13     Scorestage(eunpassnum,Eoversixty,Eoversenventy,Eovereighty,Eoverninety,punpassnum,poversixty,pov
     14     dbms_output.put_line(eunpassnum||'  '||poversixty);
     15*  end;
    SQL> /
    0  1
      

  7.   

    CallableStatement proc =con.prepareCall(call); 
    //注册
    proc.registerOutParameter(1, java.sql.Types.NUMERIC);
    .
    .
    .
    proc.registerOutParameter(10, java.sql.Types.NUMERIC);
    proc.execute();
    //取值
    proc.getString(1);....proc.close();你的写法传的都是in参数
      

  8.   

    String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";

    CallableStatement proc =con.prepareCall(call);
              
    proc.setInt(1,Eunpassnum);
    proc.registerOutParameter(1,java.sql.Types.INTEGER;
    proc.setInt(2,Eoversixty);
    proc.registerOutParameter(2,java.sql.Types.INTEGER); proc.setInt(3,Eoversenventy);
                        proc.registerOutParameter(3,java.sql.Types.INTEGER); 
           proc.setInt(4,Eovereighty);
                         proc.registerOutParameter(4,java.sql.Types.INTEGER);       
    proc.setInt(5,Eoverninety);
         proc.registerOutParameter(5,java.sql.Types.INTEGER);
    proc.setInt(6,punpassnum);
                          proc.registerOutParameter(6,java.sql.Types.INTEGER);
    proc.setInt(7,poversixty);
                            proc.registerOutParameter(7,java.sql.Types.INTEGER);
    proc.setInt(8,poversenventy);
                            proc.registerOutParameter(8,java.sql.Types.INTEGER);
    proc.setInt(9,povereighty);
                             proc.registerOutParameter9,java.sql.Types.INTEGER);
    proc.setInt(10,poverninety);
                             proc.registerOutParameter(10,java.sql.Types.INTEGER);

           proc.execute();

      con.close();
     }
     catch(SQLException e)
     {System.out.println(e);}
     
    看了5楼,自己做了如下的更改。
    但是有问题: 
    问题1:
     
    我自己已经 在Java中定义了Eunpassnum,然后用
    proc.setInt(1,Eunpassnum);
    proc.registerOutParameter(1,java.sql.Types.INTEGER;
    不久可以得到存储过程中传递过来的值吗? 然后在Java中使用所以
      不是有点多余吗
      

  9.   

    编译通过,并不表示你的存储过程就能正确输出
    你可以在PL/SQL中test一下,
    如果能输出,那么就是Java的问题
    那就只有去Java版询问了
      

  10.   


    现在plsql dev对你的procedure调试一下,毕竟在java里跑发现procedrue本身的错,这个时间的代价过高,如果调试都正确的话,在和java联调,java端的procedure调用,一般来说安装例子的规范来做就可以了,没有太多给你犯错的机会,出错一般也就是参数类型,个数,这些方面出错。
    ==================================================================
    Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
    联系方式QQ:370140387
    电子邮件:[email protected]
    网站: http://www.inthirties.com
      

  11.   

         
    int Eunpassnum =12,Eoversixty=0 ,Eoversenventy =0 ,Eovereighty =0,Eoverninety=0 ;
    int punpassnum=0 ,poversixty =0 ,poversenventy =0,povereighty =0,poverninety=0;

    try{   con=DriverManager.getConnection("jdbc:odbc:hello","system","system");
      
    String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?)}";

    CallableStatement proc =con.prepareCall(call);



    proc.registerOutParameter(1,java.sql.Types.NUMERIC);
    //proc.setInt(1,Eunpassnum);     //这个语句是不是多此一举   ???????

    proc.registerOutParameter(2,java.sql.Types.NUMERIC);
    //proc.setInt(2,Eoversixty);//这个语句是不是多此一举  ????


                        proc.registerOutParameter(3,java.sql.Types.INTEGER); 
        
                         proc.registerOutParameter(4,java.sql.Types.INTEGER);       

         proc.registerOutParameter(5,java.sql.Types.INTEGER);

                          proc.registerOutParameter(6,java.sql.Types.INTEGER);

                            proc.registerOutParameter(7,java.sql.Types.INTEGER);

                            proc.registerOutParameter(8,java.sql.Types.INTEGER);

                             proc.registerOutParameter(9,java.sql.Types.INTEGER);

                             proc.registerOutParameter(10,java.sql.Types.INTEGER);
                          
      proc.execute();
       Eunpassnum=proc.getInt(1);
       Eoversixty=proc.getInt(2);
       Eoversenventy=proc.getInt(3);
       Eovereighty=proc.getInt(4);
      System.out.println("Eun= "+Eunpassnum);
      System.out.println("Eoversixty="+Eoversixty);

      con.close();
     }
     catch(SQLException e)
     {System.out.println(e);}
     问题1:proc.registerOutParameter(1,java.sql.Types.NUMERIC);
    proc.setInt(1,Eunpassnum);   
    第二句是不是多此一举,因为我想要的是参数传递过来的结果。直接用 Eunpassnum=proc.getInt(1);就OK了。问题2:
    当我编译执行时:   发现代码:
    proc.registerOutParameter(9,java.sql.Types.INTEGER);

                             proc.registerOutParameter(10,java.sql.Types.INTEGER);
                          
      proc.execute();    ?????????????????????????????????
       Eunpassnum=proc.getInt(1);
       Eoversixty=proc.getInt(2);
    中的
     proc.execute();
     不能执行,不知为什么???问题3:
    我用了8楼的方法,但是在sqlplus 中得不到输出结果。
    谁能帮我最终解答。本人会给出100分中的80
      

  12.   


    proc.setInt(1,Eunpassnum); 
    proc.registerOutParameter(1,java.sql.Types.INTEGER);
    -----这个只是注册第一个传出参数的类型,
     你在前边定义的 
     int  Eunpassnum =0;
    这个参数如果不给它从新赋值,也就是赋值为存储过程中的执行结果的话,它的值是不会改变的,会一直是你定义的时候赋的值,也就是0Eunpassnum =proc.getInt(1);--这样才能把存储过程执行完后,第一个传出参数的值赋值给Eunpassnum 
      

  13.   

    proc.setInt(1,Eunpassnum); proc.setInt(2,Eoversixty); proc.setInt(3,Eoversenventy); 
    proc.setInt(4,Eovereighty); 
    proc.setInt(5,Eoverninety); proc.setInt(6,punpassnum); 
    proc.setInt(7,poversixty); 
    proc.setInt(8,poversenventy); 
    proc.setInt(9,povereighty); 
    proc.setInt(10,poverninety);
    -------------------------------------------------
    这几句去掉,传出的参数,如果是in型参数,需要用上边的语句赋值,传出的参数不用给它赋值,改为
    proc.registerOutParameter(1,java.sql.Types.INTEGER; 
    proc.registerOutParameter(2,java.sql.Types.INTEGER); 
    proc.registerOutParameter(3,java.sql.Types.INTEGER); 
    proc.registerOutParameter(4,java.sql.Types.INTEGER);  
    proc.registerOutParameter(5,java.sql.Types.INTEGER); 
    proc.registerOutParameter(6,java.sql.Types.INTEGER); 
    proc.registerOutParameter(7,java.sql.Types.INTEGER); 
    proc.registerOutParameter(8,java.sql.Types.INTEGER); 
    proc.registerOutParameter(9,java.sql.Types.INTEGER); 
    proc.registerOutParameter(10,java.sql.Types.INTEGER); 
      

  14.   


    上边叙述又问题,重新写下如下:proc.setInt(1,Eunpassnum); proc.setInt(2,Eoversixty); proc.setInt(3,Eoversenventy); 
    proc.setInt(4,Eovereighty); 
    proc.setInt(5,Eoverninety); proc.setInt(6,punpassnum); 
    proc.setInt(7,poversixty); 
    proc.setInt(8,poversenventy); 
    proc.setInt(9,povereighty); 
    proc.setInt(10,poverninety); 
    ------------------------------------------------- 
    上边这几句去掉,如果是in型参数,需要用上边的语句赋值,但这里是out型参数,只需要注册,不用给它赋值,改为 
    proc.registerOutParameter(1,java.sql.Types.INTEGER; 
    proc.registerOutParameter(2,java.sql.Types.INTEGER); 
    proc.registerOutParameter(3,java.sql.Types.INTEGER); 
    proc.registerOutParameter(4,java.sql.Types.INTEGER);  
    proc.registerOutParameter(5,java.sql.Types.INTEGER); 
    proc.registerOutParameter(6,java.sql.Types.INTEGER); 
    proc.registerOutParameter(7,java.sql.Types.INTEGER); 
    proc.registerOutParameter(8,java.sql.Types.INTEGER); 
    proc.registerOutParameter(9,java.sql.Types.INTEGER); 
    proc.registerOutParameter(10,java.sql.Types.INTEGER);
      

  15.   

    首先非常感谢happy84911 的热心相助。
    我再去调试一下。
      

  16.   

    问题3: 
    我用了8楼的方法,但是在sqlplus 中得不到输出结果。 
    谁能帮我最终解答。本人会给出100分中的80分 报什么错了,你的sqlplus设置:
    sql>set serveroutput on;了吗
      

  17.   


    String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"; 
    -----------------------------------------------------
    这句有问题:你的存储过程里只有10个out型的参数,这里怎么有20个"?"呢
    proc.execute(); 不能执行,应该是这个原因下边代码试试:---------------------------------------------------------------------------------
    try{  
        con=DriverManager.getConnection("jdbc:odbc:hello","system","system"); 
        String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?)}"; 
        CallableStatement proc =con.prepareCall(call);     proc.registerOutParameter(1,java.sql.Types.INTEGER; 
        proc.registerOutParameter(2,java.sql.Types.INTEGER); 
        proc.registerOutParameter(3,java.sql.Types.INTEGER); 
        proc.registerOutParameter(4,java.sql.Types.INTEGER);  
        proc.registerOutParameter(5,java.sql.Types.INTEGER); 
        proc.registerOutParameter(6,java.sql.Types.INTEGER); 
        proc.registerOutParameter(7,java.sql.Types.INTEGER); 
        proc.registerOutParameter(8,java.sql.Types.INTEGER); 
        proc.registerOutParameter(9,java.sql.Types.INTEGER); 
        proc.registerOutParameter(10,java.sql.Types.INTEGER);     proc.execute();     Eunpassnum=proc.getInt(1);
        Eoversixty=proc.getInt(2);
        Eoversenventy=proc.getInt(3);
        Eovereighty=proc.getInt(4);
        Eoverninety=proc.getInt(5);
        punpassnum=proc.getInt(6);
        poversixty=proc.getInt(7);
        poversenventy=proc.getInt(8);
        povereighty=proc.getInt(9);
        poverninety=proc.getInt(10);}catch(SQLException e){
       System.out.println(e);

    String Eun=String.valueOf(Eunpassnum);
    String Esix=String.valueOf(Eoversixty); 
    String Ese=String.valueOf(Eoversenventy);
    String Eei=String.valueOf(Eovereighty);
    String Eni=String.valueOf(Eoverninety); 
    String pun=String.valueOf(punpassnum);
    String psix=String.valueOf(poversixty); 
    String pse=String.valueOf(poversenventy);
    String pei=String.valueOf(povereighty);
    String pni=String.valueOf(poverninety); text1.setText(Eun); 
    text2.setText(Esix); 
    text3.setText(Ese); 
    text4.setText(Eei); 
    text5.setText(Eni); 
    text6.setText(pun); 
    text7.setText(psix);; 
    text8.setText(pse); 
    text9.setText(pei); 
    text10.setText(pni); 
      

  18.   

    connection最后要关一下,差点犯错误
     ⊙﹏⊙b汗
      

  19.   

    String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
    System.out.println("1");
    CallableStatement proc =con.prepareCall(call);

    proc.registerOutParameter(1,java.sql.Types.NUMERIC);

    proc.registerOutParameter(2,java.sql.Types.NUMERIC);  proc.execute();//java.sql.SQLException: General error
    System.out.println("看代码在哪儿停止");
       Eunpassnum=proc.getInt(1);
                               Eoversixty=proc.getInt(2);
                                     System.out.println (Eunpassnum);
                                     System.out.println(Eoversity);
    但是还没有输出结果,就在
     proc.execute();
    这一句停止了,抛出了异常:java.sql.SQLException: General error
    为什么proc.execute();
    不能执行了!!!!
      

  20.   

    String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"; 
    上边说了
    存储过程里只有10个out型参数
    你的代码里又20个问号,只要10个就够了
      

  21.   

     得到了happy84911 的帮助后:
    try{  
        con=DriverManager.getConnection("jdbc:odbc:hello","system","system"); 
        String call="{call Scorestage(?,?,?,?,?,?,?,?,?,?)}"; 
        CallableStatement proc =con.prepareCall(call); int Eunpassnum =0,Eoversixty=0,Eoversenventy=0 ,Eovereighty=0,Eoverninety=0;
    int     punpassnum=0 ,poversixty =0 ,poversenventy =0,povereighty =0,poverninety=0;
        proc.registerOutParameter(1,java.sql.Types.INTEGER; 
        proc.registerOutParameter(2,java.sql.Types.INTEGER); 
        proc.registerOutParameter(3,java.sql.Types.INTEGER); 
        proc.registerOutParameter(4,java.sql.Types.INTEGER);  
        proc.registerOutParameter(5,java.sql.Types.INTEGER); 
        proc.registerOutParameter(6,java.sql.Types.INTEGER); 
        proc.registerOutParameter(7,java.sql.Types.INTEGER); 
        proc.registerOutParameter(8,java.sql.Types.INTEGER); 
        proc.registerOutParameter(9,java.sql.Types.INTEGER); 
        proc.registerOutParameter(10,java.sql.Types.INTEGER);     proc.execute();     Eunpassnum=proc.getInt(1); 
        Eoversixty=proc.getInt(2); 
        Eoversenventy=proc.getInt(3); 
        Eovereighty=proc.getInt(4); 
        Eoverninety=proc.getInt(5); 
        punpassnum=proc.getInt(6); 
        poversixty=proc.getInt(7); 
        poversenventy=proc.getInt(8); 
        povereighty=proc.getInt(9); 
        poverninety=proc.getInt(10); 
    con.close();}catch(SQLException e){ 
      System.out.println(e); 

    String Eun=String.valueOf(Eunpassnum); 
    String Esix=String.valueOf(Eoversixty); 
    String Ese=String.valueOf(Eoversenventy); 
    String Eei=String.valueOf(Eovereighty); 
    String Eni=String.valueOf(Eoverninety); 
    String pun=String.valueOf(punpassnum); 
    String psix=String.valueOf(poversixty); 
    String pse=String.valueOf(poversenventy); 
    String pei=String.valueOf(povereighty); 
    String pni=String.valueOf(poverninety); text1.setText(Eun); 
    text2.setText(Esix); 
    text3.setText(Ese); 
    text4.setText(Eei); 
    text5.setText(Eni); 
    text6.setText(pun); 
    text7.setText(psix);; 
    text8.setText(pse); 
    text9.setText(pei); 
    text10.setText(pni); 结果仍全是0.我happy84911提供的基础上只加上了初始化语句 
    int Eunpassnum =0,Eoversixty=0,Eoversenventy=0 ,Eovereighty=0,Eoverninety=0;
    int     punpassnum=0 ,poversixty =0 ,poversenventy =0,povereighty =0,poverninety=0;
    我想这应该不是问题所在.对于在SQLPLUS中输出这几个参数的实际值,本人还存在
    如下问题:当我在
    create or replace procedure Scorestage( 
    Eunpassnum  out number, 
    Eoversixty  out number, 
    Eoversenventy  out number, 
    Eovereighty  out number, 
    Eoverninety out number, 
    punpassnum out number, 
    poversixty  out number, 
    poversenventy  out number, 
    povereighty  out number, 
    poverninety out number, 

    as 
    HEnglish number; 
    Hplitics number; 
    cursor Firststu_cursor is 
    select English,plitics from Firststudent; 
    begin 
    open Firststu_cursor; 
    loop 
    fetch Firststu_cursor into HEnglish,Hplitics; 
    exit when Firststu_cursor%notfound; 
    if HEnglish <60 then 
    Eunpassnum:=Eunpassnum+1; 
    end if; 
    if HEnglish>60 then 
    Eoversixty:=Eoversixty+1; 
    end if; 
    if HEnglish>70 then 
    Eoversenventy:=Eoversenventy+1; 
    end if; 
    if HEnglish>80 then  
    Eovereighty:=Eovereighty+1; 
    end if; 
    if HEnglish>90 then 
    Eoverninety:=Eoverninety+1; 
    end if; 
    if Hplitics <60 then 
    punpassnum:=punpassnum+1; 
    end if; 
    if Hplitics>60 then 
    poversixty:=poversixty+1; 
    end if; 
    if Hplitics>70 then 
    poversenventy:=poversenventy+1; 
    end if; 
    if Hplitics>80 then  
    povereighty:=povereighty+1; 
    end if; 
    if Hplitics>90 then 
    poverninety:=poverninety+1; 
    在此出添加代码
    end if; 
    end loop; 
    close Firststu_cursor; 
    end scorestage; 
    中的添加代码:dbms.output.put_line("Eunpassnum"||Eunpassnum);
    在SQLPLUS中仍然没有结果输出至于
    zxf_feng 所说的sql>set serveroutput on; 的作用是什么??
    能不能详细点。怎么样在SQLPJUS才能输出参数的值(其实,我是想同过这个存储过程统计出表Firststudent中各个科目不及格,大于60分,大于60等个分数段人数)
    难道我存储过程写的有误吗??
      

  22.   

    set serveroutput on 
    在sqlplus中输入内容,默认是off的,如果是off dbms_output.put_line不会显示.
      

  23.   

    那当我输入set serveroutput on后,
    应该在怎么办,才能输出存储过程中的 显示 dbms_output.put_line语句
    ???
      

  24.   

    收入set serveroutput on以后
    dbms.output.put_line("Eunpassnum"||Eunpassnum); 
    就能打印出结果来了
      

  25.   

     Eunpassnum:=0; 
      Eoversixty:=0; 
      Eoversenventy:=0; 
      Eovereighty:=0; 
      Eoverninety:=0; 
      punpassnum:=0; 
      poversixty:=0; 
      poversenventy:=0; 
      povereighty:=0; 
      poverninety:=0; 
    --------------------------------
    你的存储过程里还有上边这几句初始化语句吗?
    没有的话 加上,还是加在以前的位置
    sql里null+1=null
    也就是说
    poverninety=proc.getInt(10);---执行这几句的时候,存储过程返回的值是null,但proc.getInt()方法 当存储过程里的值是null的时候,返回的可能是0,所以返回出来的结果还是0试一下吧,
    声明:只是又可能是这个的问题
      

  26.   

    首先重点感谢感谢 happy84911和zxf_feng 
    接分吧!!!