我是菜鸟都不算的新手,求帮忙了啊,
找了一天也不知道什么地方错了。create or replace package FIND_USER istype cur_user is REF CURSOR;procedure p_finduser (u_name in varchar2,page_no in number,page_user_num in number,allusers out cur_user);end FIND_USER;
create or replace package body FIND_USER isprocedure p_finduser (u_name in varchar2,page_no in number,page_user_num in number,allusers out cur_user)
as 
          manager varchar2(20);  
begin 
  SELECT ismanager into manager FROM t_users WHERE username=u_name;
       IF manager='普通员工权限' THEN
          open allusers for (SELECT db.user_id,db.username,db.password,db.sex,db.age,db.phone,db.address,db.ismanager
          from (SELECT rownum as rn,t.* FROM t_users t WHERE t.username=u_name )db 
          where rn between page_user_num*(page_no-1)+1 and page_user_num*page_no);
       ELSE
          open allusers for(SELECT db.user_id,db.username,db.password,db.sex,db.age,db.phone,db.address,db.ismanager
          from (SELECT rownum as rn,t.* FROM t_users t)db 
          where rn between page_user_num*(page_no-1)+1 and page_user_num*page_no);
       END IF;
end p_finduser;
end FIND_USER ;

解决方案 »

  1.   

    我也自己也调试了,弄了半天还没不清楚哪里错了。
    调到现在,我只要一点调试到了
     open allusers for (SELECT db.user_id,db.username,db.password,db.sex,db.age。。
    这一行,PL/SQL就变成未响应了。
    我崩溃了。
    哪位大神帮忙给我找找啊
    需要的话,我可以给表贴上
      

  2.   

    SELECT db.user_id,db.username,db.password,db.sex,db.age,db.phone,db.address,db.ismanager
              from (SELECT rownum as rn,t.* FROM t_users t WHERE t.username=u_name )db 
              where rn between page_user_num*(page_no-1)+1 and page_user_num*page_no
    -----------------------------------------------------------------------------------
    page_user_num,page_no,u_name 分别给参数赋值,直接执行这个SQL,看看运行效果
      

  3.   

    这个我试过,没问题的。运行的结果是正确的,但是创建这个存储过程时,package body已经编译,但有错误。
    所以这个存储过程至今不能使用。
      

  4.   


    那还问什么,直接去里面找语法错误,没有提示就换个工具比如pl-sql dev,不用sql-plus
      

  5.   

    好吧,我一直用的就是PL/SQL,我在创建package body时什么错误也不提示,只是在左侧栏的树状目录中,package bodies下FIND_USER的图标上带个小叉号。在SQL PLUS 下创建提示的是“已创建包但有错误”。本身
    我对oracle存储过程就不懂,这次用到oracle只是打个酱油 ,平时都是用mysql。
      

  6.   


    create or replace package body FIND_USER is  procedure p_finduser(u_name        in varchar2,
                           page_no       in number,
                           page_user_num in number,
                           allusers      out cur_user) as
        manager varchar2(20);
      begin
        SELECT ismanager into manager FROM t_users WHERE username = u_name;
        IF manager = '普通员工权限' THEN
          open allusers for
            SELECT db.user_id,
                   db.username,
                   db.password,
                   db.sex,
                   db.age,
                   db.phone,
                   db.address,
                   db.ismanager
              from (SELECT rownum as rn, t.*
                      FROM t_users t
                     WHERE t.username = u_name) db
             where rn between page_user_num * (page_no - 1) + 1 and
                   page_user_num * page_no;
        ELSE
          open allusers for
            SELECT db.user_id,
                   db.username,
                   db.password,
                   db.sex,
                   db.age,
                   db.phone,
                   db.address,
                   db.ismanager
              from (SELECT rownum as rn, t.* FROM t_users t) db
             where rn between page_user_num * (page_no - 1) + 1 and
                   page_user_num * page_no;
        END IF;
      end p_finduser;
    end FIND_USER;
      

  7.   

    额,是有报错提示的。 你把这个创建页面关掉,然后从左边小红叉右键点击 EDIT,这时候在编译就有错误提示了
      

  8.   

    感谢各位朋友好心帮忙,特别感谢8楼的programmerxiaocai能帮我把代码给调正确了。
    虽然我感觉我的代码和8楼的代码几乎一样,但是我的就是有错,8楼的却是正确的。
    小弟在此受教了,以后代码也要书写的清晰一点,格式分明,看着也舒服。
    可以结贴了,如果8楼的大哥看再看到我的回复,请告诉我一下,是不是我的代码书写的格式问题?
    还是那一对括号的问题?