--创建类型
create or replace package myPackage
as
   type refCursor is ref cursor;
end;--创建存储过程
create or replace procedure GetEventsPages
   (
     PageSize number default 10,
     PageIndex number default 1,
     docount int default 0,
     ResultCur out myPackage.refCursor
   )
   is
   v_sql varchar2(4000);
   v_lower number;
   v_upper number;
   begin
     if docount=1 then
        open ResultCur for select count(1) as "count" from vPrompShow;
        return;
     end if;      v_lower:=(PageIndex-1)*PageSize;
     v_upper:=v_lower+PageSize;
     v_sql:=' select rownum as "id"
                     ,T.*
              from (
                     select O.Title  as "Title" 
                            ,O.ProjectName 
                            ,O.TypeOf 
                            ,O.FromUser
                            ,O.CreateTime 
                      from vPrompShow  O
                      order by O.CreateTime desc
                   ) T
              where rownum between :lower and :upper
            ';     
     open ResultCur for v_sql using v_lower,v_upper;
     
   end;

解决方案 »

  1.   

    .net中调用:     OracleConnection conn = new OracleConnection("Data Source=test;User Id=system;Password=111111");
            try
            {
                
                conn.Open();
                OracleCommand cmd = new OracleCommand("GetEventsPages", conn);            cmd.CommandType = CommandType.StoredProcedure;
                OracleParameter PageSize = new OracleParameter("PageSize", OracleType.Number);
                PageSize.Value = 10;
                cmd.Parameters.Add(PageSize);
                OracleParameter PageIndex = new OracleParameter("PageIndex", OracleType.Number);
                PageIndex.Value = 1;
                cmd.Parameters.Add(PageIndex);
                OracleParameter docount= new OracleParameter("docount", OracleType.Int32);
                docount.Value = 0;
                cmd.Parameters.Add(docount);
                
                OracleParameter parm = new OracleParameter("ResultCur",OracleType.Cursor);
                parm.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(parm);
                OracleDataAdapter adapter = new OracleDataAdapter(cmd);
                DataSet ds = new DataSet();
                adapter.Fill(ds);
                this.GridView1.DataSource = ds.Tables[0].DefaultView;
                this.GridView1.DataBind();
            }
            catch
            {
                throw;
            }
            finally
            {
                conn.Close();
            }
      

  2.   

    修正以下,我这边用.net测试过可以的create or replace procedure GetEventsPages
       (
         PageSize number,
         PageIndex number,
         docount int,
         ResultCur out system.myPackage.refCursor
       )
       is
       v_sql varchar2(4000);
       v_lower number;
       v_upper number;
       begin
         if docount=1 then
            open ResultCur for select count(1) as "count" from vPrompShow;
            return;
         end if;      v_lower:=(PageIndex-1)*PageSize;
         v_upper:=v_lower+PageSize;
         v_sql:=' select *
                  from
                     (
                       select rownum as "ID"
                              ,T.*
                       from (
                               select O.Title  as "Title" 
                                      ,O.ProjectName 
                                      ,O.TypeOf 
                                      ,O.FromUser
                                      ,O.CreateTime 
                               from vPrompShow  O
                               order by O.CreateTime desc
                             ) T
                       )TB
                  where TB.ID between :lower and :upper
                ';     
         open ResultCur for v_sql using v_lower,v_upper;
         
       end;
      

  3.   

    TO vivianfdlpw() :百分相赠,万分感谢!
      

  4.   

    期望和你交个朋友。My MSN:[email protected]
    My QQ :43466761
      

  5.   

    vivianfdlpw,你好!
    我照你的方法去做,它报错了啊:异常详细信息: System.Data.OleDb.OleDbException: ORA-06550: 第 1 行, 第 7 列: PLS-00306: 调用 'GETEVENTSPAGES' 时参数个数或类型错误 ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored源错误: 
    行 92:  catch
    行 93:  {
    行 94:  throw;
    行 95:  }
    行 96:  finally
     
    *******************************************************请问怎么解决,还请帮忙一下。。
    谢谢~