FWTemporaryTable com Campo CLOB x BLOB - ORACLE

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ê.

Problema passou a ocorrer na Release 33 - Na Release 25 não ocorria - Estranhamente.

Sabe 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.

Sim. 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.

A 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,

A classe FWTemporaryTable recebeu um novo método para permitir a criação dos campos memo como CLOB, trata-se do método SetClobMemo.

Utilizando esse método, enviado o parâmetro como .T., os campo serão criado como CLOB no banco de dados, conforme cada banco trabalha, regras do DBAccess etc.

A liberação da lib com esse novo método está prevista para dia 13/06/2022.

Documentação:

https://tdn.totvs.com.br/display/framework/FWTemporaryTable (Já é possível ver o método e a data da lib)

https://tdn.totvs.com.br//pages/viewpage.action?pageId=684996327 (Ainda não liberada)

Obrigado pelo Retorno!