CREATE OR REPLACE PACKAGE Userdata AS
    --Define Cursor
    CURSOR Cur1 IS Select * from dict_login;
    TYPE UserCur IS REF cursor RETURN cur1%ROWTYPE;
    --Define Procedure
    PROCEDURE GetUsers(
        p_real_name  IN  dict_login.real_name%TYPE,
        UsersCur  IN OUT UserCur);
END UserData;CREATE OR REPLACE PACKAGE BODY Userdata AS
    PROCEDURE GetUsers(
        p_real_name  IN  dict_login.real_name%TYPE,
        UsersCur  IN OUT UserCur) IS
  BEGIN
    IF INSTR(p_real_name,'%') <> 0 and INSTR(p_real_name,'_') <> 0 THEN
      OPEN UserCur FOR
        select *
          from dict_login
          where real_name like p_real_name
          order by real_name, login_name;
    ELSE
      OPEN UserCur FOR
        select *
          from dict_login
          where real_name = p_real_name
          order by real_name, login_name;
    END IF;
  END GetUsers;
END Userdata;

解决方案 »

  1.   

    "invalid"证明你的创建的问题:
    包头错误如下:
    Line: 3 Column: 34  Error: PLS-00201: 必须说明标识符 'DICT_LOGIN'
    Line: 3 Column: 20  Error: PL/SQL: SQL Statement ignored
    Line: 3 Column: 12  Error: PLS-00341: 游标 'CUR1' 的说明不完整或格式错误
    Line: 4 Column: 5  Error: PL/SQL: Declaration ignored
    Line: 7 Column: 26  Error: PLS-00201: 必须说明标识符 'DICT_LOGIN.REAL_NAME'
    Line: 6 Column: 5  Error: PL/SQL: Declaration ignored
    \
    先把包头调试成功了,包体才能找到问题!先调这个吧!
      

  2.   

    你把OPEN UserCur FOR这句
    改成OPEN UsersCur FOR试试!你在包体中定义的是UsersCur