CREATE OR REPLACE PROCEDURE T_PERSON_ALL_SELECTINFO(
CU_PERSON_O OUT REF CURSOR;
)
IS
BEGIN
OPEN CU_PERSON_O FOR
 SELECT * FROM T_Person;
END T_PERSON_ALL_SELECTINFO;dbcon为已经打开的数据库连接OracleDataAdapter.SelectCommand = 
        New OracleCommand("T_PERSON_ALL_SELECTINFO", dbcon)OracleDataAdapter.SelectCommand.AddParameter("CU_PERSON_O", OracleDbType.RefCursor,                                                 ParameterDirection.Output)OracleDataAdapter.SelectCommand.ExecuteNonQuery()DataAdapter.Fill(DataSet.Table,CType(.Parameters("CU_PERSON_O").Value, Types.OracleRefCursor))

解决方案 »

  1.   

    --参考
    CREATE OR REPLACE PACKAGE  PAG_CUR_TEST
    AS
     TYPE c_TYPE IS REF CURSOR;
     PROCEDURE P_CUR_TEST(p_CUR IN OUT c_TYPE);
    END  PAG_CUR_TEST;
    /
    CREATE OR REPLACE PACKAGE BODY PAG_CUR_TEST
    AS   PROCEDURE P_CUR_TEST(p_CUR IN OUT c_TYPE)
       AS
       BEGIN
            OPEN c_TYPE FOR SELECT * FROM TABLE_NAME;
       END P_CUR_TEST;
    END PAG_CUR_TEST;
    /
      

  2.   

    奇怪,二楼的存储过程我建立不出来呀,即使在前面定义了TYPE c_TYPE IS REF CURSOR;也还是不能建立成功;(难道只能按三楼的方式建一个包么?
      

  3.   

    先谢谢各位的帮助!大家在讨论讨论吧:)TYPE c_TYPE IS REF CURSOR;这句话我在存储过程里定义都出问题:(为什么呢?
      

  4.   

    TO:qiaozhiwei(乔)
    三楼的例子有问题...
      

  5.   

    Compilation errors for PACKAGE BODY SHUIBJ.PAG_CUR_TESTError: PLS-00330: 无效的类型名用法或子类型名用法
    Line: 7
    Text: OPEN c_TYPE FOR SELECT * FROM TABLE_NAME;
      

  6.   

    把 c_TYPE 改成 P_CUR 就可以了啊