2

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 バイトの範囲全体を取得するにはどうすればよいですか?

4

1 に答える 1

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)));"

これで目的が解決するかもしれません。

于 2013-01-16T05:42:26.817 に答える