create or replace procedure test.query_test_proc(
tid number,rs out SYS_REFCURSOR
)
as
begin
if tid==0 then
open rs for select * from tmenu where menupid=tid;
end if;
end;调用仔储过程
cstmt=conn.prepareCall("{call query_test_proc(?,?)}");cstmt.setInt(1,0);
//cstmt.registerOutParameter(1,0);
cstmt.registerOutParameter(2,OracleTypes.CURSOR);
cstmt.execute();ResultSet rs = (ResultSet)cstmt.getObject(1);
while(rs.next()){
System.out.println(rs.getInt(1));
}报错啊 不太会用这东西,要怎么写才对呢,才能正确调用仔储过程,没有分了,帮帮忙吧

解决方案 »

  1.   

    报什么错误?
    你的存储过程就有错....
    if tid==0 then 改成 if tid=0 then
      

  2.   

    在java程序里调用?我还没调过呢。
      

  3.   


    错误信息
    line 1, column 7:
    PLS-00905: object TEST.QUERY_TEST_PROC is invalid
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored
      

  4.   

    那我已经改过来了tid=0   我复制时没注意看  仔储过程 可以正常创建 就是调用时候  有错
      

  5.   

    你在PLSQL中调用呢,是否可以得到结果?
      

  6.   

    object TEST.QUERY_TEST_PROC is invalid
    说你的存储过程编译出错...
    而且你的存储过程很少奇怪.. tid=0 才去执行OPEN,又加了menupid=tid相当于menupid=0,
    if tid=0 then
    open rs for select * from tmenu where menupid=tid;
    end if;
      

  7.   

    我这么写 就是想试着加个判断 没接触过这东西  正在学 所以就这么写了 我在java中调用的 只贴了出主要代码就是这样  主要是想试着往里传个参数 没有什么大意义 就是想实践一下