Следующая функция предназначена для разделения CLOB с разделителями на строковый массив:
FUNCTION SPLIT_CLOB(sText IN clob, sDel IN VARCHAR2 := ',') RETURN CLOB_ARRAY IS
nStartIdx PLS_INTEGER := 1;
nEndIdx PLS_INTEGER := 1;
oRet CLOB_ARRAY := CLOB_ARRAY();
BEGIN
IF sText IS NULL THEN RETURN oRet; END IF;
IF DBMS_LOB.getlength(sText) = 0 THEN RETURN oRet; END IF;
LOOP
nEndIdx := DBMS_LOB.INSTR(sText, sDel, nStartIdx);
IF nEndIdx > 0 THEN
oRet.Extend;
/* compiler error on this statement: */
oRet(oRet.LAST) := DBMS_LOB.SUBSTR(sText, (nEndIdx – nStartIdx), nStartIdx);
nStartIdx := nEndIdx + LENGTH(sDel);
ELSE
oRet.Extend();
oRet(oRet.LAST) := DBMS_LOB.SUBSTR(lob_loc => sText, offset => nStartIdx);
EXIT;
END IF;
END LOOP;
RETURN oRet;
END SPLIT_CLOB;
Линия:
oRet(oRet.LAST) := DBMS_LOB.SUBSTR(sText, (nEndIdx – nStartIdx), nStartIdx);
выдает ошибки компилятора PLS-00103. Но если я поменяю звонок на:
oRet(oRet.LAST) := DBMS_LOB.SUBSTR(sText, 5, nStartIdx);
все хорошо. Я попытался создать другую переменную, чтобы выполнить вычитание заранее, но столкнулся с той же ошибкой PLS-00103.
Я потерял связь? Я забыл, как вычесть два числа или что-то?
Пожалуйста, помогите. Спасибо.
EDIT
Хорошо, странная вещь только что произошла ... в остальной части этого пакета я знаю, что вычитал некоторые PLS_INTEGER где-то еще в другой функции ... поэтому я нашел такой пример, затем скопируйте и вставьте минус знак найден в моей другой функции, и вещь компилируется ...
Спасибо за вашу помощь ...