Tempo aproximado para leitura: 00:05:00 min
Ocorrência
Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information.
Tradução: Não há suporte para geração SQL dinâmica para UpdateCommand em SelectCommand que não retorne informações importantes de coluna
Ambiente
Framework - Framework (Linha RM) - Banco de Dados - Todas as versões
Causa
Este erro ocorre pelo fato do provider não ter conseguido obter a informação referente a chave primária da tabela que sofrerá a alteração ou exclusão dinamicamente.
O provider tenta retornar nos catálogos do banco de dados as informações da chave primária da tabela para realizar o comando, quando por algum motivo estas informações não são retornadas o erro ocorre.
Geralmente o erro está relacionado a inconsistências na base de dados, ou seja, a tabela que será afetada pela operação deveria possuir uma chave primária e não possui ou não foi localizada por motivo da criação de sinônimos ou views materializadas para as tabelas de catálogo.
Solução
- Identificando e solucionando o problema em SQL Server:
Para identificar o problema no SQL Server o ideal é a avaliação da consistência estrutural da base em comparação com a base padrão TOTVS para a mesma versão. A base vazia padrão TOTVS pode ser obtida através do Portal do Cliente.
Além disso a captura de um profiler/tracer no momento do erro pode evidenciar qual tabela exatamente está inconsistente. No SQL Server um rastreamento pode ser realizado utilizando o SQL Server Profiler do SQL Server: Framework - Framework RM - BD - Profiler SQL Server
Caso ainda assim não localize a tabela, a consulta abaixo pode identificar as tabelas sem chave primária, em comparação com uma base padrão TOTVS poderão ser encontradas as tabelas inconsistentes, sem a primary key na base que apresenta o problema.
SELECT name AS 'TabelaSemChavePrimaria'
FROM SYS.tables
WHERE OBJECTPROPERTY(OBJECT_ID, 'TableHasPrimaryKey') = 0
ORDER BY name
Após a identificação da tabela inconsistente, verifique em uma base padrão ou junto a equipe de suporte da TOTVS qual a estrutura correta da pk a ser criada e crie a pk em um ambiente controlado realizando um teste para verificar se o problema foi solucionado.
Caso positivo, em um momento de pouca ou nenhuma utilização da base efetue a criação da pk na base de produção.
- Identificando e solucionando o problema em Oracle:
Em bases de dados Oracle, além da ausência de chaves primárias o problema pode estar relacionado a
sinonyms e views materializadas criada com o script disponível para download no link abaixo e que está anexa no artigo: views_materializadas_dic_oracle.sql.
A criação de sinonyms na base TOTVS linha RM é realizado para algumas tabelas utilizadas no acesso ao sistema, para que as mesmas sejam passíveis de ser consultadas pelo usuário sysdba.
São elas: GPARAMS, GPERMIS, GUSUARIO, GACESSO, GCOLIGADA, GSISTEMA, GUSRPERFIL, GSERVICO, GDATALOG, GPARAMETROSSISTEMA
Excetuando estas tabelas, a criação de sinonyms em outras tabelas que fazem são atualizadas em updates ou deletes dinâmicos pode ocasionar erros.
A criação de views materializadas para os catálogos do Oracle é realizada em alguns clientes como alternativa de melhoria de desempenho para as consultas realizadas pelo provider da aplicação. Para verificar se possui views materializadas na base realize a seguinte consulta:
SELECT mview_name FROM all_mviews WHERE OWNER = 'RM';
A existência destes objetos não consistem em um problema e tem o objetivo de melhorar o desempenho, porém as mesmas precisam estar sempre atualizadas semanalmente, com isso a procedure spJobAtualizaViewMat.sql deve ser associada a um job para se executada nesse período, pois ela é responsável por realizar essa atualização.
Caso as duas situações acima não sejam a causa do problema, é provável que o problema esteja sendo causado pela ausência da chave primária de alguma tabela.
Para a identificação seguimos a mesma linha do SQL Server, comparação de estruturar e rastreamento do banco através do tracer. Para executar um tracer no banco de dados Oracle peça ao seu DBA que gere um relatório AWR ou utilize alguma ferramenta de auditoria do banco de dados.
Caso ainda assim não localize a tabela, a consulta abaixo pode identificar as tabelas sem chave primária, em comparação com uma base padrão TOTVS poderão ser encontradas as tabelas inconsistentes sem a primary key na base que apresenta o problema:
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER='RM'
MINUS
SELECT TABLE_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' AND OWNER='RM'
0 Comentários