CREATE OR REPLACE PACKAGE PKG_RTN AS 
  TYPE RESULT_TYPE IS REF CURSOR; 
PROCEDURE RETURNT(RS_DATA IN OUT PKG_RTN.RESULT_TYPE);END PKG_RTN; CREATE OR REPLACE package body PKG_RTN  as
PROCEDURE RETURNT(RS_DATA IN OUT PKG_RTN.RESULT_TYPE) IS 
BEGIN 
  OPEN RS_DATA FOR 
    SELECT * FROM contractinfo INNER JOIN.....; //这里的效率会很低吗?
END; 请教oracle的游标返回一个结果集,效率会低吗?
如果不用游标的方式,其它还有什么返回结果集方式效率会高啊,在sql server中都是用select语句返回一个结果集,到了oracle这边我担心执行的效率问题请那位帮忙解答一下谢谢

解决方案 »

  1.   

    关注,我也遇到这个问题!总觉得sql server 比ORACLE用着方便!
      

  2.   

    可以返回出一个数组,然后在应用程序接受并解析出数组中的对象就好了。以下为JAVA代码中的操作:
    可变数组的定义方法如下:
    create or replace type testArray is varray(5) of number(3)
             PL/SQL存储过程里调用可变数组作为输出参数:
    create or replace function getTestArray return testArray
    as
       o_data testArray:= testArray ();  
    begin
        for v_count in 1..5 loop
          o_data.extend; 
          o_data(v_count):= v_count;
        end loop;
       return o_data;
    end; 
    2.2.2  Java程序的编写
            由存储过程返回的可变数组同样可以映射成java数组类型。但Java程序调用存储过程返回的可变数组方式和索引表方式却不相同,这一点应注意,具体方法如下:
    public static void main( ) 
    {
    ......
    //调用存储过程
    .           OracleCallableStatement stmt =(OracleCallableStatement)conn.prepareCall ( "begin ? := getTestArray; end;" );    
                stmt.registerOutParameter( 1, OracleTypes.ARRAY," testArray" );
                stmt.executeUpdate();
                // 得到 ARRAY 对象
                ARRAY simpleArray = stmt.getARRAY(1);
    //转换为java数组
                String[ ] values = (String[])simpleArray.getArray();
    //输出数组内容
                for( int i = 0; i < values.length; i++ )
                 System.out.println( "row " + i + " = '" + values[i] +"'" );
    }
      

  3.   

    to:create or replace type testArray is varray(5) of number(3)//请解释一下什么意思?看不到取数据的代码啊?
    .....
    for v_count in 1..5 loop // 请解释一下什么意思?能否写的详细点啊?sql转到oracle,感觉很多的东西要学啊,见笑。
      

  4.   

    to:mantisXF盼望您写的详细点啊,我看不太懂您的代码,特别是取数据如何放到数组中啊
      

  5.   

    应该不会,效率低的话,要么是SQL语句写的有问题,要么是索引有问题。要么就是数据量过大,表建立的有问题!