0
傳遞一個巨大的字符串的存儲功能
我有以下類型和功能:問題通過IBatis.Net
CREATE OR REPLACE TYPE SERIAL_NUMBER_TABLE AS TABLE OF VARCHAR2(4000);
CREATE OR REPLACE FUNCTION F_DEVICE_SERIAL_TABLE(
SN_LIST IN CLOB,
SN_DELIMITER IN VARCHAR2 DEFAULT ';')
RETURN SERIAL_NUMBER_TABLE
IS
V_STRING LONG := SN_LIST || SN_DELIMITER;
V_POS PLS_INTEGER;
V_DATA SERIAL_NUMBER_TABLE := SERIAL_NUMBER_TABLE();
BEGIN
LOOP
V_POS := INSTR(V_STRING, SN_DELIMITER);
EXIT WHEN (NVL(V_POS, 0) = 0);
V_DATA.EXTEND;
V_DATA(V_DATA.COUNT) := TRIM(SUBSTR(V_STRING, 1, V_POS - 1));
V_STRING := SUBSTR(V_STRING, V_POS + 1);
END LOOP ;
RETURN V_DATA;
END F_DEVICE_SERIAL_TABLE;
而且我想通過iBATIS的XML映射以下映射傳遞一個巨大的字符串配置:
<parameterMaps>
<parameterMap id="StringClob" class="DeviceAlias">
<parameter property="SerialNumber" type="String" dbType="CLOB"/>
</parameterMap>
</parameterMaps>
<select id="SelectBySerialNumberList" parameterMap="StringClob" resultMap="DeviceResult">
<![CDATA[
SELECT *
FROM DEVICE D
INNER JOIN
(SELECT * FROM TABLE(CAST(F_DEVICE_SERIAL_TABLE(?) AS SERIAL_NUMBER_TABLE))) SERIAL_TABLE
ON SERIAL_TABLE.COLUMN_VALUE = D.S_NUMBER
]]>
</select>
當我運行這段代碼傳遞一個DeviceAlias對象與一個巨大的SerialNumber屬性集(例如SN0001,SN0002; ...),我收到以下錯誤:
ORA-01460: unimplemented or unreasonable conversion requested
有關如何解決此問題的任何想法? PS:對於小型條目,此代碼可以工作
This works。 但是我必須在將字符串傳遞給該函數之前檢查該字符串,以避免它變得大於4000. –
但是,如果您確實想要傳遞CLOB,該怎麼辦?這不是一個正確的答案,它是一個混亂。 – demongolem