日期:2014-05-17  浏览次数:20695 次

java操作oracle存储过程出错,请各位帮忙看下错在哪里,本人小白,谢谢
java代码:
package com.tiangang.text;

import java.sql.*;

public class Testprocedure2 {

//调用pro1过程
public static void main(String[] args) {


//定义需要的变量
Connection ct =null;
CallableStatement cs=null;
ResultSet rs= null;
try{
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//得到链接
ct=DriverManager.getConnection
("jdbc:oracle:thin:@127.0.0.1:1521:orcltg","scott","tiger");
//创建CallableStatement
cs=ct.prepareCall("{call pro1(?,?}");
//给第一个?赋值
cs.setInt(1, 10);
//给第二个?进行注册,因为是输出值
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
//执行
cs.execute();
rs=(ResultSet)cs.getObject(2);
//取出输出值
while(rs.next()){
System.out.println(rs.getString("ename"));
System.out.println(rs.getString("sal"));
}

}catch(Exception e){
e.printStackTrace();
}finally{

}
}
}


存储过程代码:
--创建一个包,该包中定义一个游标类型
create or replace package pack1 is
--定义一个游标数据类型
type my_cursor is ref cursor;
end;

--2.编写过程
create or replace procedure pro1
(v_in_deptno in number,v_out_result out pack1.my_cursor) is
begin
  open v_out_result for select * from emp where deptno=v_in_deptno;
--为了让java程序可以使用游标,不能在这里关闭游标
end;

eclipse报错提示信息:
java.sql.SQLException: ORA-06550: 第 1 行, 第 17 列: 
PLS-00103: 出现符号 ";"在需要下列之一时:
 . ( ) , * @ % & | = - + < / >
   at in is mod remainder not range rem => .. <an exponent (**)>
   <> or != or ~= >= <= <> and or like LIKE2_ LIKE4_ LIKEC_
   between || indicator multiset member SUBMULTISET_
符号 ")" 被替换为 ";" 后继续。

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:754)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:218)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:971)