首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java调用存储过程有关问题。

2012-04-14 
java调用存储过程问题。。。。。。。。。。。。。。。。。。。。。。。create or replace procedure pasbegin execute immediate

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;
[解决办法]
探讨

你定义的存储过程返回值都没有,又如何期待java中给你返回呢?

而且,你的存储过程写的也太怪异了。
看好了:
Java code

--按照部门编号查询部门信息
Create Or Replace Procedure findDeptByDeptno(p_dno In dept.deptno%Type)
Is
v_deptrec dept%Rowtype;
Begin

……

[解决办法]
计算你是想调用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);

热点排行