-- 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_HALF
Error: PLS-00201: 必须声明标识符 'CHOICETYPE'
Line: 18
Text: return choicetype ;
Error: PL/SQL: Declaration ignored
Line: 17
Text: function str2tbl( p_str in varchar2 )
这个不是我写的,拷过来就是这样,不知道这是什么原因,难道是别人也没有定义就可以使用了?请大家帮我看看!
4 个解决方案
#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数据类型
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);
可以直接在包外面创建 (与创建表一样),如:
create or replace is table of varchar2(500);
或者放在包头声明
type choicetype is table of varchar2(500);
#4
你应该先定义一个类型:
type choicetype is table of varchar2(500);
type choicetype is table of varchar2(500);
#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数据类型
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);
可以直接在包外面创建 (与创建表一样),如:
create or replace is table of varchar2(500);
或者放在包头声明
type choicetype is table of varchar2(500);
#4
你应该先定义一个类型:
type choicetype is table of varchar2(500);
type choicetype is table of varchar2(500);