is  type M_Cursor is ref cursor;  procedure pagination(
       myCursor out M_Cursor,
       TableName in varchar, -- 表名
       Fields in varchar := '*', -- 需要返回的列
       OrderField in varchar:='', -- 排序的字段名
       PageSize in int , -- 页尺寸
       PageIndex in int, -- 页码
       TotalPage in int , -- 返回记录总数, 非 0 值则返回
       OrderType in int , -- 设置排序类型, 非 0 值则降序
       sqlWhere in varchar:=null -- 查询条件 (注意: 不要加 where)
  );
end datapagination;CREATE OR REPLACE PACKAGE body datapagination--错误文本=pls-00103:出现符号"create"
is
 procedure pagination
 (
       myCursor out M_Cursor,
       TableName in varchar, -- 表名
       Fields in varchar := '*', -- 需要返回的列
       OrderField in varchar:='', -- 排序的字段名
       PageSize in int , -- 页尺寸
       PageIndex in int, -- 页码
       TotalPage in int , -- 返回记录总数, 非 0 值则返回
       OrderType in int , -- 设置排序类型, 非 0 值则降序
       sqlWhere in varchar:=null -- 查询条件 (注意: 不要加 where)
 );
 is
   v_sql varchar2(1000);--主语句
   v_strTmp varchar2(110) ;-- 临时变量
   v_strOrder varchar2(400);-- 排序类型
 begin
   if TotalPage!=0 then
      if sqlWhere is null then
         v_sql:='select count(*) as Total from '||TableName ;
      else
         v_sql:='select count(*) as Total from '||TableName||' where '+sqlWhere ;
      end if;
   else
      --如果OrderType不是0,就执行降序,这句很重要!
      if OrderType!=0 then
          v_strTmp:='<(select min';
          v_strOrder:=' order by '||OrderField||' desc';
      else
          v_strTmp:='<(select max';
          v_strOrder:=' order by '||OrderField||' asc';
      end if;
      --如果是第一页就执行以下代码,这样会加快执行速度
      if PageIndex=1 then
           if sqlWhere is null then
              v_sql:='select top '||PageSize||' '||Fields||' from '||TableName||' where '||sqlWhere||' '||v_strOrder;
           else
              v_sql:='select top'||PageSize||' '||Fields||' from '||TableName||v_strOrder;
           end if;
      else
       --以下代码赋予了v_sql以真正执行的SQL代码
       v_sql:='select '||Fields||' from '||TableName||' where '||OrderField||v_strTmp||'('||OrderField||') '||
              'from (
                     select '||OrderField||
                     ' from '||TableName||
                     ' where rownum<='||(PageIndex-1)*pagesize||
                     v_strOrder||
                   ' )  tblTmp) and rownum<='||pagesize||v_strOrder;
       if sqlWhere is not null then
                 v_sql:='select '||Fields||' from '||TableName||' where '||OrderField||v_strTmp||'('||OrderField||') '||
              'from (
                     select '||OrderField||
                     ' from '||TableName||
                     ' where '||sqlWhere||' and rownum<='||(PageIndex-1)*pagesize||
                     v_strOrder||
                   ' )  tblTmp) and '||sqlWhere||' and rownum<='||pagesize||v_strOrder;
       end if;      end if;
   end if;
  open myCursor for v_sql;
  end pagination;
end datapagination;
网上搞来一段分页代码,在ORACLE里面编译的时候出现这句话
CREATE OR REPLACE PACKAGE body datapagination--错误文本=pls-00103:出现符号"create"
真是奇怪,半天不知道什么意思,各位帮帮呀,谢谢

解决方案 »

  1.   

    全了,is前面就一句create or replace package datapagination isORACLE里面自己不显示的
      

  2.   

    汗,分开执行真的通过了。。
    不过在程序里面执行出错
    ======================
    ORA-00936: 缺少表达式
    ORA-06512: 在"HGUSER.DATAPAGINATION", line 65
    ORA-06512: 在line 1
    ==================================可能是这行open myCursor for v_sql;程序如下C#的
                t_b_SysUserData ds = new t_b_SysUserData();
                selectCommand = new OracleCommand("datapagination.pagination", conn);
                dar.SelectCommand = selectCommand;
                selectCommand.CommandType = CommandType.StoredProcedure;            selectCommand.Parameters.Add("TableName", OracleType.VarChar, 100);    //表  名  
                selectCommand.Parameters["TableName"].Direction = ParameterDirection.Input;
                selectCommand.Parameters["TableName"].Value = sTableName;            selectCommand.Parameters.Add("Fields", OracleType.VarChar, 1000);   
                selectCommand.Parameters["Fields"].Direction = ParameterDirection.Input;
                selectCommand.Parameters["Fields"].Value = sFields;            selectCommand.Parameters.Add("OrderField", OracleType.VarChar, 1000);    
                selectCommand.Parameters["OrderField"].Direction = ParameterDirection.Input;
                selectCommand.Parameters["OrderField"].Value = sOrderField;            selectCommand.Parameters.Add("PageSize", OracleType.Number);
                selectCommand.Parameters["PageSize"].Direction = ParameterDirection.Input;
                selectCommand.Parameters["PageSize"].Value = iPageSize;            selectCommand.Parameters.Add("PageIndex", OracleType.Number);    
                selectCommand.Parameters["PageIndex"].Direction = ParameterDirection.Input;
                selectCommand.Parameters["PageIndex"].Value = iPageIndex;            selectCommand.Parameters.Add("TotalPage", OracleType.Number);    //页总记录数  
                selectCommand.Parameters["TotalPage"].Direction = ParameterDirection.Output;
                selectCommand.Parameters["TotalPage"].Value = 0;            selectCommand.Parameters.Add("OrderType", OracleType.Number);
                selectCommand.Parameters["OrderType"].Direction = ParameterDirection.Input;
                selectCommand.Parameters["OrderType"].Value = iOrderType;            selectCommand.Parameters.Add("sqlWhere", OracleType.VarChar, 1000);    //表  名  
                selectCommand.Parameters["sqlWhere"].Direction = ParameterDirection.Input;
                selectCommand.Parameters["sqlWhere"].Value = sSqlWhere;              selectCommand.Parameters.Add("myCursor", OracleType.Cursor);   //返回的游标
                selectCommand.Parameters["myCursor"].Direction = ParameterDirection.Output;            dar.Fill(ds);
                TotalPage = int.Parse(selectCommand.Parameters["TotalPage"].Value.ToString());
                return ds;
      

  3.   

    dar.Fill(ds);
    出错,怎么回事呀