我得到了一个与oracle数据库的问题,我创建了一个存储过程,我想传递一个项目的ID数组到这个过程来选择数据根据项目数组使用“在“子句中,我发现的可用解决方案是创建一个函数并传递一个字符串值,并用逗号分隔所有项目的ID,并且此函数将为每个项目id返回一个包含行的数据。此方法工作正常当我尝试在蟾蜍在SELECT语句中,,但是当我在存储过程中使用它,我得到一个奇怪的错误ORA-12714:无效的国家字符集指定
“ORA-12714:指定无效的国家字符集”
搜索有关的原因后,的t帽子错误我发现它是根据这个页面的oracle版本中的一个bug,它在10.2.0.4 oracle补丁中被修复,确切的原因是为返回数据表的函数声明一个游标
由于我不可能让在实际生产环境中工作的用户停止服务器以应用更新补丁,所以我想知道是否有任何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;
2010-07-25
Khaled
+0
这是一个逗号分隔的字符串分割成一系列令牌的复杂的方式。看看这个简单的方法来实现同样的事情:http://stackoverflow.com/questions/3142665/how-to-convert-csv-to-table-in-oracle/3142795#3142795 –
2010-07-25 14:39:24
+0
非常感谢,工作正常。我是Oracle新手,我使用T-Sql创建了它,并使用了转换工具并将其转换为PL-Sql –
2010-07-26 08:01:43