PROBLEMAS NO INSERT

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
vinicampos
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 14
Registrado em: Sex, 23 Set 2011 7:18 pm
Localização: APUCARANA - PR

PESSOAL VIRA E MEXE TENHO PROBLEMAS COM INSERT... UM CASOQ UE TENHO AQUI E O SEGUINTE... NO PL/SQL TENHO UM BLOCO DE INSERT COM MUITOOOOOS CAMPOS MESMO... E DIRETO ELE DA VALOR MAIOR QUE A PRECISAO... AI O QUE SEMPRE FACO E DEBUGAR A PROCEDURE E COLOCAR UM BREAK E VER O QUE ESTA PASSANDO EM CADA CAMPO E COMPARAR COM O TAMANHO DOS CAMPOS DA TABELA... alguém CONHECE UM JEITO MAIS FACIL DE EU SEI LA já CAIR DIRETO NO CAMPO QUE ESTA DANDO PAU... ALGO ASSIM...


OBRIGADO
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Nestes casos não existem maneiras faceis.

Seu problema esta na construção dos blocos que não respeita a especificação da tabela. Por default os campos tem cerca de 30 posições no forms, e muito frequentemente se esquece de alterar este dimensionamento para atender ao que foi especificado na tabela.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

vinicampos,

Não tenho muitas informações para lhe passar uma resposta específica. Não leve a mal, mas você apresentou seu problema de uma forma bem genérica.

Por exemplo, não sei se a sua procedure faz INSERT INTO .. VALUES .. ou INSERT INTO ... SELECT . Não sei se ela usa cursores, se por acaso se trata da simples cópia de valores entre tabelas, ou da totalização dos registros de uma tabela em outra.

Essas informações ajudariam a formular uma melhor resposta. Vamos então partir para as conjecturas.

Digamos que sua procedure faz INSERT INTO .. VALUES ... Você poderia fazer uma pré-validação de dados antes do seu INSERT, verificando se cada um dos campos numéricos apresenta valor maior do que a capacidade de precisão da tabela de destino. Poderia enviar uma mensagem de erro para o usuario (EXCEPTION), ou acumular estes regisros em uma tabela temporária e posteriormente tratar dos valores.

Caso se trate da simples cópia de valores entre tabelas, sem cálculos, sem totalizações, etc, eu recomendaria que você comparasse a estrutura das colunas das tabelas de origem e destino, deixando ambas iguais.

Digamos que sua procedure faz INSERT INTO .. SELECT ... Você poderia por exemplo criar uma VIEW (SELECT ...FROM ... WHERE..) que lhe retornaria todos os registros que apresentassem valores acima da precisão dos campos da tabela de destino. Antes de executar a procedure, você executaria a view e trataria préviamente a situação dos registros com valores acima do permitido.

Existem inúmeras soluções para o problema, da forma que você postou aqui. Pode ser que os foristam tenham outras sugestões para seu problema.

Fique à vontade para postar outras dúvidas que tiver sobre este problema.

Atenciosamente,

Sergio Coutinho
marcus.kobel
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qui, 12 Mai 2011 4:54 pm
Localização: Porto Alegre - RS

Cara, o melhor que tu pode fazer é colocar uma validação em CADA UM dos campos que podem dar problema. Pode ser trabalhoso e tal, mas com isso tu evita ter que ficar rezando pro código não dar pau e debugar o que aconteceu.
Assim, pra cada campo que tu consistir tu pode fazer duas coisas: ou alertar que um campo está com valor inválido ou arrumar o valor automaticamente ele pra não dar erro no INSERT.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes