java调用存储过程问题。。。。。。。。。。。。。。。。。。。。。。。
create or replace procedure p
as
begin
execute immediate 'select * from interface_info';
end p;
怎样获取查询出来的值啊?这样调报错,
PLS-00222: no function with name 'P' exists in this scope
- Java code
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@ip保密:1521:数据库保密", "账号保密", "密码保密"); CallableStatement cs = con.prepareCall("{? = call p() }"); cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); cs.execute(); cs.getResultSet(); rs.close(); con.close();[解决办法]
定义该存储过程的用户,跟JDBC的登录用户是一个么?
如果不是一个,存储过程前面指定Schema的名字。
[解决办法]
不过。。。你的存储过程并没有定义 return,看起来比较诡异。
此外,也没有声明结果集游标,直接Select应该是不能返回数据的。
[解决办法]
你可以Google下:JDBC Oracle 存储过程 样例
我刚才看了几个,都是说需要定义返回游标的。
[解决办法]
你定义一个游标包,然后把查出来的数据放到游标包中,然后你在java中取数据,
[解决办法]
没试过,但临时表应该是在数据库连接断开时才删除的。
[解决办法]
你定义的存储过程返回值都没有,又如何期待java中给你返回呢?
而且,你的存储过程写的也太怪异了。
看好了:
- Java code
--按照部门编号查询部门信息Create Or Replace Procedure findDeptByDeptno(p_dno In dept.deptno%Type)Isv_deptrec dept%Rowtype;Begin Select * Into v_deptrec From dept Where deptno=p_dno; dbms_output.put_line('------------------------ '); dbms_output.put_line('部门编号: '||v_deptrec.deptno); dbms_output.put_line('部门名称: '||v_deptrec.dname); dbms_output.put_line('部门位置: '||v_deptrec.loc); dbms_output.put_line('------------------------ '); Exception When no_data_found Then dbms_output.put_line('该部门不存在...');End;
[解决办法]
[解决办法]
计算你是想调用function,java中调用方式不对吧:
//获取调用的语句集
java.sql.CallableStatement cs=null;
String sql="{call ?:=get_sal(?)}";
cs=conn.prepareCall(sql);
cs.setString(2, ename);
cs.registerOutParameter(1, Types.DOUBLE);
cs.execute();
result=cs.getDouble(1);