create or replace package pkg_test 
as
type cur_test is ref cursor; -- 定義一個cursor的type
end pkg_test;
/
create or replace procedure p_test
(
v_cur out pkg_test.cur_test
)
as
v_sql varchar2(100); -- 
begin
v_sql := 'select a1,a2 from test';
OPEN v_cur FOR v_sql; --
exception
when others then 
DBMS_OUTPUT.PUT_LINE('Error ---------------' || sqlcode || ' : ' || sqlerrm ); 
end p_test;
/
Java程式:
……
CallableStatement call = conn.prepareCall("{ call p_test(?) }");
call.registerOutParameter(1, OracleTypes.CURSOR);// 註冊out參數的SQL數據類型
call.execute();
ResultSet rs=(ResultSet)call.getObject(1);// 取得得數据結果集合
while(rs.next())
……

解决方案 »

  1.   

    call p_test(?) 
    其中的?是参数吗
    还有在其中v_sql := 'select a1,a2 from test';
    是不是可能用任意的sql语句呢
    如果要用到别名可以这样实现吗select a1 in A1,a2 in A2 from ....where....group by ...union...order by ...都可以用吗
      

  2.   


    可以--只要能查询出结果的sql语句
      

  3.   

    如果要用到别名可以这样实现吗select a1 in A1,a2 in A2 from ....where....group by ...union...order by ...都可以用吗只要你单独的语句可以查出结果就行.
      

  4.   

    我说的是用JAVA写数据库的存储过程,而不是简单的调用或者用PL/SQL写存储过程
      

  5.   

    CallableStatement call = conn.prepareCall("{ call p_test(?) }");
    call.registerOutParameter(1, OracleTypes.CURSOR);// 註冊out參數的SQL數據類型
    call.execute();
    ResultSet rs=(ResultSet)call.getObject(1);// 取得得數据結果集合
    while(rs.next())
    这个不就是java写数据库的存储过程吗?
    不过我不是很理解这些语句能详细讲解一下吗?
      

  6.   

    测试了一下好像以上方法不行
    在java中调用返回空值
    请问我要在oracle查看结果集如何办
      

  7.   

    UP jiezhi(風依舊) ( )