我遇到了oracle数据库问题,我创建了一个存储过程,我想将一个项目ID数组传递给此过程,以便使用“ in”子句根据项目数组选择数据,这是我发现的可用解决方案是创建一个函数并传递一个字符串值,该字符串的所有项目ID均以逗号分隔,此函数将为每个项目ID返回带有一行数据的数据量。当我在select语句中的蟾蜍中尝试该方法时,这种方法很好用,但是当我在存储过程中使用它时,出现一个奇怪的错误
“ ORA-12714:指定了无效的国家字符集”
在搜索了该错误的原因之后,我发现根据此页面,它是该版本的oracle中的一个错误,并且已在10.2.0.4 oracle补丁中对其进行了修复,确切的原因是为返回a的函数声明了一个游标数据表
因为我不可能让在现场生产环境中工作的用户停止服务器来应用更新补丁,所以我想知道是否有任何Oracle专家可以帮助我声明一个游标并返回该游标而不是返回表。
我的Oracle功能,谢谢
create or replace
FUNCTION SplitIDs(
v_List IN VARCHAR2)
RETURN RtnValue_Set PIPELINED
AS
SWV_List VARCHAR2(2000);
v_RtnValue Dt_RtnValue := Dt_RtnValue(NULL);
BEGIN
SWV_List := v_List;
WHILE (instr(SWV_List,',') > 0)
LOOP
FOR RetRow IN
(SELECT ltrim(rtrim(SUBSTR(SWV_List,1,instr(SWV_List,',') -1))) SelectedValue
FROM dual
)
LOOP
v_RtnValue.SelectedValue := RetRow.SelectedValue;
PIPE ROW(v_RtnValue);
END LOOP;
SWV_List := SUBSTR(SWV_List,instr(SWV_List,',')+LENGTH(','),LENGTH(SWV_List));
END LOOP;
FOR RetRow IN
(SELECT ltrim(rtrim(SWV_List)) SelectedValue FROM dual
)
LOOP
v_RtnValue.SelectedValue := RetRow.SelectedValue;
PIPE ROW(v_RtnValue);
END LOOP;
RETURN;
END;