Bom, antes de mais nada : há MUUUUUUITOS ANOS o datatype LONG é de-suportado, E ele tem muitas e várias limitações (por exemplo, não pode participar de cláusula WHERE, não pode ser operador para funções string e/ou de filtro como LIKE, só pode ter um LONG por tabela, não pode ser chave para JOINs, etc, etc, etc) : se teu Sistema não foi desenvolvido há mais de 10 anos atrás (que é mais ou menos quando o LONG foi de-suportado) , tá mais que Documentado que vc não deveria estar usando LONGs.... Sendo assim, minha Primeira Sugestão é que vc CONVERTA esses LONGs para LOBs , provavelmente usando a função TO_LOB : com isso aí sim vc pode usar a informação string longa em comandos SQL.... CASO por qquer motivo isso seja Proibido, aí NECESSARIAMENTE entre outras penalidades (performance, principalmente) vc vai ter a INCONVENIÊNCIA de não poder trabalhar diretamente em SQL : provavelmente vc vai ter que escrever uma rotina PL/SQL que manipule teus LONGs com SQL dinâmico via DBMS_SQL, https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:665224430110 é um exemplo.... Outra opção para LONGs (SE vc tem certeza que eles são SEMPRE menores que 32 KB) é vc se aproveitar da conversão automática (que apareceu no banco 9i, iirc) de LONGs para VARCHAR2(32767) que o PL/SQL faz, https://stackoverflow.com/questions/769787/what-is-the-best-way-to-search-the-long-datatype-within-an-oracle-database tem um exemplo que é mais ou menos : DECLARE
l_var VARCHAR2(32767); -- max length BEGIN FOR rec IN (SELECT ID, LONG_COLUMN FROM TABLE_WITH_LONG_COLUMN) LOOP l_var := rec.LONG_COLUMN; IF l_var LIKE '%350%' THEN -- is there '350' string? dbms_output.put_line('ID:' || rec.ID || ' COLUMN:' || rec.LONG_COLUMN); END IF; END LOOP; END; ==>> OBVIAMENTE, é por tua conta total adaptar as lógicas demonstradas para o seu caso... E NEM PRECISO FALAR, isso é algo manual que VOCÊ vai fazer sozinho, é inconveniente portanto, o inconveniente é COMPLEXO, portanto é DEMORADO de fazer, E PORTANTO É MAIS CARO, tua Empresa vai gastar umas boas horas-homem fazendo isso, mas se não tem jeito, não tem, é um IMPOSTO a mais que vcs estão pagando por usar alguma coisa NÃO SUPORTADA.... Uma outra opção, MAS que também depende de criação/manipulação de objetos no database (o que nem sempre como desenvolvedor de código vc estará Autorizado a fazer) seria vc pedir pra ser criada uma OUTRA tabela, que vai estar sempre vazia e que só seu report vai usar (pode até ser cruiada como Global Temporary Table, que só consome espaço temp e não espaço real de dados), e nessa tabela vc tem a coluna que guarda tua informação criada como CLOB, aí teu programa lê a informação LONG da tabela original e grava no CLOB dessa tabela de trabalho, aí vc pode usar SQL pra consultar os dados dela no seu report de boas : https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:510622111991 tem um exemplo mas é algo relativamente simples, é abrir cursor e pra cada registro pedir um insert into tabeladetrabalho select colunas, to_lob(colunalong) from tabelaorigem; []s Chiappa