Os dados em um campo longo no Oracle são encapsulados e não são exibidos com um simples select. Embora esse tipo esteja obsoleto, ele ainda é encontrado em várias visualizações internas do Oracle, provavelmente por compatibilidade com versões anteriores e/ou dificuldade em substituí-lo. Existe algum truque sobre como o texto dentro de um campo tão longo pode ser recuperado e manipulado apenas com SQL? Não estou interessado em uma solução pl/sql.
Por exemplo, a consulta a seguir falharia com "ORA-00932: tipos de dados inconsistentes: CHAR esperado ficou LONG":
select *
from dba_triggers a
where a.OWNER = 'YOUR_OWNER'
and a.TRIGGER_BODY like '%begin%';
SQL puro:
Se estiver consultando em dba_triggers, você precisa adicionar table_owner: a lista de colunas fornecida ao sys_dburigen deve levar a uma linha exclusiva.
Você pode descobrir que não consegue obter o que deseja neste caso de forma simples ou fácil. Colunas LONGAS são extremamente antigas e difíceis de trabalhar.
Considere implementar a função LONG_TO_CLOB abaixo (via Finn Ellebaek Nielsen ):
Você pode usar funções CLOB nativas (como DBMS_LOB.INSTR) para pesquisar seus dados com eficiência em SQL puro. Fazer alterações nos dados é mais problemático. Você pode usar REGEXP_REPLACE em colunas CLOB, mas o velho ditado sobre expressões regulares — você tinha um problema, agora tem dois — definitivamente se aplica.
Se você planeja fazer alterações em grandes quantidades nos gatilhos, como no seu exemplo, eu consideraria usar DBMS_METADATA.GET_DDL para objetos que atendem aos seus critérios, mas seu problema, conforme descrito, é mais teórico do que prático.