我有一个功能,它将CSV列表拆分为数字表。:
create or replace function SYC_SplitIds
(IDList in varchar2)
return SYC_IDNRTABLE pipelined ...
其中SYC_IDNRTABLE声明为:
SYC_IDNRTable as table of spectrum.SYC_IDNR;
和SYC_IDNR是:
type SYC_IDNr as object(IDNr Integer)
该功能本身运作正常。至少这样的查询可以正常工作:
INSERT INTO TEST_TEMP_IDS
SELECT IDNr AS ID
FROM Table(SYC_SplitIDs ('1234,5678'));
但是,如果我使用参数而不是固定字符串尝试相同的查询:
INSERT INTO TEST_TEMP_IDS
SELECT IDNr AS ID
FROM Table(SYC_SplitIDs (:IDLIST));
其中IDLIST被声明为VARCHAR2(32767)并使用与之前相同的'1234,5678'字符串初始化,我得到一个,至少对我来说,奇怪的ORA-22905错误:“无法访问非嵌套表中的行项目”
我发现我可以使用以下方法避免此错误:
INSERT INTO TEST_TEMP_IDS SELECT IDNr AS ID
FROM Table(SYC_SplitIDs (CAST(:IDLIST AS VARCHAR(4000)));
但现在我限制为最大4000字节,这还不够......如何获得完整的32767字节范围?
答案 0 :(得分:0)
INSERT INTO TEST_TEMP_IDS SELECT IDNr AS ID FROM Table(SYC_SplitIDs (CAST(:IDLIST AS VARCHAR(4000)));
但是现在我已将它限制为最大4000字节,这还不够......如何获得完整的32767字节范围?
也许您可以尝试使用"(CAST(:IDLIST AS VARCHAR(MAX)));"
这可能会解决目的。