一个包:错误文本=pls-00103:出现符号"create",什么意思呀

cow8063 2009-08-12 05:54:46
 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"
真是奇怪,半天不知道什么意思,各位帮帮呀,谢谢
...全文
772 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cow8063 2009-08-12
  • 打赏
  • 举报
回复
dar.Fill(ds);
出错,怎么回事呀
cow8063 2009-08-12
  • 打赏
  • 举报
回复
汗,分开执行真的通过了。。。。。。。。
不过在程序里面执行出错。。。
======================
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;




cow8063 2009-08-12
  • 打赏
  • 举报
回复
全了,is前面就一句

create or replace package datapagination is

ORACLE里面自己不显示的
csuxp2008 2009-08-12
  • 打赏
  • 举报
回复
代码没贴全,包头定义怎么不见了

包头和包体之间,加个/,分别执行

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧