水晶报表版本是8.5
存储过程是:
create or replace package pkg_test4
as
type v_cursor is ref cursor;
end pkg_test4;
/
create or replace procedure pro_test4
(P_CURSOR in out pkg_test4.v_cursor)
as
sqlstr varchar2(3000);
begin
sqlstr :='select table_name from user_tables';
open p_cursor for sqlstr;
end pro_test4;
/
水晶报表发布给一个java应用
问题:
1、返回多条记录,只能这么定义存储过程?
2、如何在sqlplus里测试存储过程?
3、在水晶报表里能访问该存储过程,但是发布以后不能生成报表?

解决方案 »

  1.   

    我研究了两天,给你一见建议吧.仅供参考:1、返回多条记录,只能这么定义存储过程? //只能这样,不能像sql server,mysql那样返回值.
    2、如何在sqlplus里测试存储过程?   //这个不知道.
    3、在水晶报表里能访问该存储过程,但是发布以后不能生成报表? //可以生成报表,我试过的.可以拉,推的方式都行.
      

  2.   

    1. 有多种方法,返回cursor是一种方法而已。另外的常用方法是使用临时表来存储返回记录。
    2. DECLARE
      L_C PKG_TEST4.V_CURSOR;
      l_v VARCHAR2(300);
    BEGIN
      PRO_TEST4(L_C);
      LOOP
        FETCH L_C 
          INTO L_V;
        EXIT WHEN L_C%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(L_V);
      END LOOP;
      CLOSE L_C;
    END;
    /3......