这是我建立的存储过程(已经编译通过):
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.
好像是参数没有传递过来,已经在这个地方编了好几天了,
若高手帮忙解答,必有重分!!!
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.
好像是参数没有传递过来,已经在这个地方编了好几天了,
若高手帮忙解答,必有重分!!!
我只是想把Eunpassnum,Eoversixty等参数传回到java的调用环境中去,用于图形界面输出
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;
}
}
然后在system.out(poverninety)试试
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
//注册
proc.registerOutParameter(1, java.sql.Types.NUMERIC);
.
.
.
proc.registerOutParameter(10, java.sql.Types.NUMERIC);
proc.execute();
//取值
proc.getString(1);....proc.close();你的写法传的都是in参数
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中使用所以
不是有点多余吗
你可以在PL/SQL中test一下,
如果能输出,那么就是Java的问题
那就只有去Java版询问了
现在plsql dev对你的procedure调试一下,毕竟在java里跑发现procedrue本身的错,这个时间的代价过高,如果调试都正确的话,在和java联调,java端的procedure调用,一般来说安装例子的规范来做就可以了,没有太多给你犯错的机会,出错一般也就是参数类型,个数,这些方面出错。
==================================================================
Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
电子邮件:[email protected]
网站: http://www.inthirties.com
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分
proc.setInt(1,Eunpassnum);
proc.registerOutParameter(1,java.sql.Types.INTEGER);
-----这个只是注册第一个传出参数的类型,
你在前边定义的
int Eunpassnum =0;
这个参数如果不给它从新赋值,也就是赋值为存储过程中的执行结果的话,它的值是不会改变的,会一直是你定义的时候赋的值,也就是0Eunpassnum =proc.getInt(1);--这样才能把存储过程执行完后,第一个传出参数的值赋值给Eunpassnum
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);
上边叙述又问题,重新写下如下: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);
我再去调试一下。
我用了8楼的方法,但是在sqlplus 中得不到输出结果。
谁能帮我最终解答。本人会给出100分中的80分 报什么错了,你的sqlplus设置:
sql>set serveroutput on;了吗
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);
⊙﹏⊙b汗
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();
不能执行了!!!!
上边说了
存储过程里只有10个out型参数
你的代码里又20个问号,只要10个就够了
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等个分数段人数)
难道我存储过程写的有误吗??
在sqlplus中输入内容,默认是off的,如果是off dbms_output.put_line不会显示.
应该在怎么办,才能输出存储过程中的 显示 dbms_output.put_line语句
???
dbms.output.put_line("Eunpassnum"||Eunpassnum);
就能打印出结果来了
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试一下吧,
声明:只是又可能是这个的问题
接分吧!!!