Oracle快捷11G R2: 在PLSQL我有一個包含價值的這樣一個CSV列表VARCHAR2:PLSQL移動數據
vList:='1212,3232,3232,4343,54545,65654,65665,65654,788787'
我想移動這些成集,所以我創建了一個新的類型:
CREATE TYPE INTEGER_TT AS TABLE OF INTEGER;
然後聲明我的變量:
my_list INTEGER_TT;
使用包含CSV的varchar2中的值填充「my_list」的最快方式(以處理器時間而非執行時間而言)是什麼?
這是我目前的代碼,查詢本身的運行時間大約爲0.01s,「批量收集」添加大約需要6秒,列表中大約有500個值。
select regexp_substr(vList,'[^,]+', 1, level) intID
bulk collect into my_list
from dual connect by regexp_substr(vList, '[^,]+', 1, level) is not null;
任何比上面我的代碼更好的選擇?
的最佳解決方案,我的成績從查詢:創建列表了89 正則表達式了1062 的XMLTable了6 –
嗨@Alex,只是一張紙條,似乎VLIST可能是最大尺寸爲4000,超過這一數額的「從xmltable(vList)給出一個錯誤:「ORA-01460:未實現或不合理的轉換請求」我看不到任何解決方法。 –
@ASims - 這是在SQL上下文中使用XMLTable,其中字符串大小限制爲4000 (直到12c),你需要使'vList'成爲一個CLOB以超過這個長度(通過一個包含1000個數字的長度爲4874的CLOB進行驗證)。 –