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 エラーが発生します。 /p>
以下を使用して、このエラーを回避できることがわかりました。
INSERT INTO TEST_TEMP_IDS SELECT IDNr AS ID
FROM Table(SYC_SplitIDs (CAST(:IDLIST AS VARCHAR(4000)));
しかし今、私は十分ではない最大 4000 バイトに制限しています... 32767 バイトの範囲全体を取得するにはどうすればよいですか?