Existe uma configuração específica no ambiente local aqui do Protheus com ORACLE em que uma tabela padrão está configurada com a propriedade X2_CLOB = '1' e existe um campo Memo Real personalizado que está como CLOB na Tabela Física.
Ao ser criado uma tabela temporária pela rotina padrão FINA110 - Baixa Automática de Títulos a Receber - a rotina faz um DbStruct() e retorna todos os campos da tabela SE1 incluindo o campo personalizado e está criando o campo como BLOB.
Ao realizar a query de insert into na tabela temporária criada, gera o erro fatal: tipos de dados inconsistentes: BLOB esperado obteve CLOB
Alguém conhece alguma forma dessa componente FWTemporaryTable criar o campo memo como CLOB ao invés de BLOB no oracle, visto que o DBSTRUCT() retorna apenas "M" (de campo MEMO) e não está respeitando o tipo da tabela de origem e nem o X2_CLOB ?
Carlos, você levantou um ponto muito interessante, vou fazer alguns testes e em breve dou um retorno pra você.
— Daniel Mendes 14 de Apr de 2022Problema passou a ocorrer na Release 33 - Na Release 25 não ocorria - Estranhamente.
— Carlos Eduardo Niemeyer Rodrigues 14 de Apr de 2022Sabe me dizer então se teve alguma alteração da tabela que você cita quanto ao usa do X2_CLOB? Pois NADA disso foi alterado na FWTemporaryTable.
— Daniel Mendes 14 de Apr de 2022Sim. Em nosso ambiente, os campos Memos em várias tabelas ORACLE são do tipo CLOB na tabela física e no X2_CLOB está igual a "1" (Ou seja ligado).
Entretanto, o componente FWTemporaryTable não está respeitando essa configuração. E assim cria uma tabela temporária contendo um campo MEMO do Tipo BLOB (Padrão Protheus) e daí gera erro fatal ao executar um insert into na tabela temporária devido a conversão de tipo no ORACLE não ser automática.
Estamos abrindo um ticket na TOTVS para verificar essa questão que está afetando em particular a rotina FINA110 mas pode afetar outros processos.
— Carlos Eduardo Niemeyer Rodrigues 14 de Apr de 2022A solução dada até o momento foi de recriar a tabela com o campo do Tipo BLOB ou excluir o campo. Mas ambas as soluções não são adequadas para o processo de migração para a release 33, tendo em vista que a tabela SE1 é bem grande (Vários Grupos de Empresas envolvidos) e é importante manter o padrão CLOB.
Creio que seja algo relacionado a libLabel TOTVS e não ao componente FwTemporaryTable em si, mas é onde está ocorrendo o problema.
— Carlos Eduardo Niemeyer Rodrigues 14 de Apr de 2022