Может быть интересно посмотреть, как Oracle самостоятельно решает эту проблему, поскольку они интенсивно используют LONG в словаре данных.
DBA_VIEWS, среди прочего, имеет столбцы TEXT (как LONG) и TEXT_VC как VARCHAR2,Это основано на внутреннем представлении INT $ DBA_VIEWS, где TEXT_VC получен из функции getlong (1, v.rowid).DBA_ARGUMENTS показывает параметры для этой функции: OPCODE и ROWID.
Трассировка (или вдохновенное возмущение v $ sql) показывает, что соответствует выполнению «выбрать текст из представления $, где rowid =: 1».
Таким образом, в основном они имеют функцию PL / SQL, которая выбирает столбец в переменную varchar2 и возвращает его.
Если вы не хотите создавать независимую функцию, последние версии Oracleможет включать это как часть представления:
create or replace view my_views as
WITH
FUNCTION view_text(i_name VARCHAR2) RETURN VARCHAR2 IS
v_ret varchar2(32000);
BEGIN
execute immediate 'select text from user_views where view_name = :name' into v_ret using i_name ;
RETURN substr(v_ret,1,4000);
END;
select view_name, view_text(view_name) view_text
from user_views
/