create or replace package PROC_QUESTION_HALF is  -- Author  : Jamin.Zhang
  -- Created : 2010-10-22 15:38:14
  -- Purpose : 半年后问卷
  -- Public type declarations
  type p_cursor is ref cursor;
  type t_ret_table is table of varchar2(4000);--用于pl/sql中的split()功能 function get_pwd(
            t varchar2
            )return varchar2;
 function split_str(var_str   in varchar2,
                    var_split in varchar2)
   return t_ret_table;  function str2tbl( p_str in varchar2 )
  return choicetype ;
------------------create or replace package body PROC_QUESTION_HALF is 中对应的代码-----------------
--转换in的条件--处理字符串
--p_str  like 'a,b,c,d'
function str2tbl( p_str in varchar2 )
return choicetype
   as
        l_str   long default p_str || ',';
        l_n        number;
        l_data    choicetype  := choicetype();
    begin
        loop
            l_n := instr( l_str, ',' );
            exit when (nvl(l_n,0) = 0);
          l_data.extend;
          l_data( l_data.count ) := ltrim(rtrim(substr(l_str,1,l_n-1)));
          l_str := substr( l_str, l_n+1 );
      end loop;
      return l_data;
  end;--------------------------------------------------------------------------------------------------
问题是在package 中没有声明choicetype
而在package body 中却使用了choicetype 
在创建package时一直报错,Compilation errors for PACKAGE SYSTEM.PROC_QUESTION_HALFError: PLS-00201: 必须声明标识符 'CHOICETYPE'
Line: 18
Text: return choicetype ;Error: PL/SQL: Declaration ignored
Line: 17
Text: function str2tbl( p_str in varchar2 )这个不是我写的,拷过来就是这样,不知道这是什么原因,难道是别人也没有定义就可以使用了?请大家帮我看看!

解决方案 »

  1.   

    function split_str(var_str in varchar2,
      var_split in varchar2)
      return t_ret_table;  function str2tbl( p_str in varchar2 )
      return choicetype ;
     这里的CHOICETYPE未定义,函数返回值应该是一个嵌套表,游标,或者其他pl/sql数据类型
      

  2.   


    返回的是return choicetype
      as
      l_str long default p_str || ',';
      l_n number;
      l_data choicetype := choicetype();
      begin
      loop
      l_n := instr( l_str, ',' );
      exit when (nvl(l_n,0) = 0);
      l_data.extend;
      l_data( l_data.count ) := ltrim(rtrim(substr(l_str,1,l_n-1)));
      l_str := substr( l_str, l_n+1 );
      end loop;
      return l_data;
      end;那应该怎么处理,希望给予指导
      

  3.   

    创建一个嵌套表类型就可以了可以直接在包外面创建 (与创建表一样),如:
    create or replace is table of varchar2(500);或者放在包头声明
    type choicetype is table of varchar2(500);
      

  4.   

    你应该先定义一个类型:type choicetype is table of varchar2(500);