В Oracle XE (10.2.0.1) происходит следующее: необработанное исключение в строке 1
declare
v int;
p_in clob := 'i think i can init like this';
begin
v := regexp_instr(p_in, 'some_regexp', 0);
exception
when others then
dbms_output.put_line('caught');
end;
/
Поскольку он находится в строке 1, он даже не может войти в раздел объявления, поэтому он не попадает в обработчик исключений.
declare
v int;
p_in clob := 'i think i can init like this'; begin
select regexp_instr(p_in, 'some_regexp', 0) into v from dual;
end;
/
ошибки в строке 5 и
declare
v int;
p_in clob := 'i think i can init like this';
begin
select regexp_instr(p_in, 'some_regexp', 0) into v from dual;
exception
when others then
dbms_output.put_line('caught');
end;
/
ловит ошибку.
=============================================== ==========================
PS. Похоже, что проблема сводится к STANDARD.REGEXP_INSTR
select package_name, object_name, overload, argument_name,
position, sequence, data_type, in_out, pls_type
from all_arguments
where object_name = 'REGEXP_INSTR' order by overload, position
обозначает две процедуры, одну для VARCHAR2 и одну для CLOB. CLOB имеет NUMBER / INTEGER в качестве параметра POSITION, тогда как VARCHAR2 имеет BINARY_INTEGER / PLS_INTEGER. Я предполагаю, что PLS_INTEGER недостаточно велик, чтобы содержать значение для очень большого CLOB в гигабайтах и т. Д.