Как указывал @APC, первая проблема в том, что перед CLLI_ARRAY
стоит двоеточие.Это заставляет компилятор PL / SQL полагать, что CLLI_ARRAY
будет переменной подстановки SQL * Plus, и когда он обнаруживает, что такая переменная не определена, он выдает ошибку, которую вы получили.
Однако,даже если вы удалите толстую кишку, вы еще не вышли из леса.После удаления двоеточия вы получите
PLS-00597: expression 'CLLI_ARRAY' in the INTO list is of wrong type
Это потому, что CLLI_ARRAY
является коллекцией типа PL / SQL, но ваш оператор возвращает одну строку.
Что вы, вероятно, хотитедля этого нужно использовать BULK COLLECT, чтобы система извлекла все результаты запроса в ваш VARCHAR2_TABLE:
with tmp as (select 'strforregexp' str from dual)
select regexp_substr(str, '\/([A-Z0-9]{11}|[A-Z0-9]{8})', 1, level) STR
BULK COLLECT into clli_array
from tmp
connect by regexp_substr(str, '\/([A-Z0-9]{11}|[A-Z0-9]{8})', 1, level) is not null
Best of luck.