none
Procedure confirmou execução, mas não obteve o resultado esperado. RRS feed

  • Pergunta

  • Prezados Srs.,

    Criei uma stored procedure que, dependendo apenas de um valor parametrizado, iria realizar um simples insert em 3 tabelas diferentes (contando com a de log).

    O código estava rodando normalmente por 6 meses, no entanto, recebi constatação de um problema que estava acerca desta procedure. Quando fui checar o log, eu verifiquei que a procedure executou com sucesso (conforme insert na tabela de log), sem falha alguma em catch, no entanto, os demais inserts não foram realizados nas respectivas tabelas, e não há nenhuma condição para que não houvessem os inserts.

    Eu sei que a explicação foi bem generalizada, e, teoricamente, seria algo impossível de acontecer sem dar algum tipo de falha em catch, ou não entrando em alguma condição para o insert, mas é literalmente como escrevi.

    Alguém faz alguma ideia do que poderia ser? Falha de Hardware, falha do banco de dados, essas coisas podem resultar no que descrevi?

    Atenciosamente,

    Renan Fernandes
    segunda-feira, 22 de maio de 2017 21:06

Todas as Respostas

  • Boa noite,

    Por favor poste o código aqui para que possamos analisar e verificar as possíveis falhas ou correções.

    segunda-feira, 22 de maio de 2017 22:46
  • Apenas pra esclarecer, o Insert ocorreu com sucesso na tabela TB_IAS_Transactionlog, com o status de 'Sucesso', mas não ocorreu nas demais tabelas que estavam acima.
    quinta-feira, 25 de maio de 2017 17:01
  • Prezado Sr. César,

    Boa tarde!

    Segue o código completo, em duas partes:

    ALTER PROCEDURE [dbo].[SP_INT_I_OrderToSAP_Start] @cOrderID CHAR(12) 
    AS 
      BEGIN 
          SET NOCOUNT ON 

          -- DECLARAÇÃO DE VARIÁVEIS 
          DECLARE @sSQLTransaction VARCHAR(MAX) = ( 'EXEC [SP_INT_I_OrderToSAP] ' 
              + Rtrim(Cast(@cOrderID AS VARCHAR)) ) 

          BEGIN TRY 
              -- CRIAÇÃO DO SERVIÇO 
              DECLARE @cServiceID VARCHAR(23) = (SELECT 
                      CONVERT(VARCHAR, Getdate(), 21)) 
              -- TIPO DE ORDEM: INICIADA 
              DECLARE @iTypeID INT = 4 
              -- STATUS DO SERVIÇO  
              DECLARE @iStatusID INT = 9 
              -- SELEÇÃO AUTOMÁTICA DE DESCRIÇÃO BASEADA NA ESCOLHA DO ID 
              DECLARE @cStatusDescription CHAR(255) = (SELECT cDescription 
                 FROM   TB_IAS_OrderServiceStatus 
                 WHERE  iID = @iStatusID) 
              -- EDITADO POR 
              DECLARE @cLastEditedBy VARCHAR(12) = 'MES' 
              -- SITE (PLANTA PROVISÓRIA) 
              DECLARE @cPlantID CHAR(4) = (SELECT TOP 1 cPlantID 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- TIPO DA ORDEM - SELEÇÃO AUTOMÁTICA 
              DECLARE @cOrderType CHAR(4) = (SELECT TOP 1 cOrderType 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- VERSÃO DA ORDEM - SELEÇÃO AUTOMÁTICA 
              DECLARE @cOrderVer CHAR(4) = (SELECT TOP 1 cOrderVer 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- LOTE - SELEÇÃO AUTOMÁTICA  
              DECLARE @cLotID CHAR(10) = (SELECT TOP 1 cLotID 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- RECURSO - SELEÇÃO AUTOMÁTICA 
              DECLARE @cResourceID CHAR(8) = (SELECT TOP 1 cResourceID 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- INÍCIO PROGRAMADO DA ORDEM - SELEÇÃO AUTOMÁTICA 
              DECLARE @dtStartProg DATETIME = (SELECT TOP 1 dtStartProg 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- FIM PROGRAMADO DA ORDEM - SELEÇÃO AUTOMÁTICA 
              DECLARE @dtEndProg DATETIME = (SELECT TOP 1 dtEndProg 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- INCIO REAL DA ORDEM - SELEÇÃO AUTOMÁTICA 
              DECLARE @dtStartReal DATETIME = (SELECT TOP 1 dtStartReal 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- FIM REAL DA ORDEM - SELEÇÃO AUTOMÁTICA 
              DECLARE @dtEndReal DATETIME = (SELECT TOP 1 dtEndReal 
                 FROM   TB_IAS_OrderFromSAP 
                 WHERE  cOrderID = @cOrderID) 
              -- STATUS DA ORDEM (REVISAR) 
              DECLARE @iOrderStatus INT = 3 
    quinta-feira, 25 de maio de 2017 17:50
  • -- INSERÇÃO DOS DADOS DO SERVIÇO 
              INSERT INTO TB_INT_OrderServiceToSAP 
                          (cServiceID, 
                           cOrderID, 
                           iTypeID, 
                           iStatusID, 
                           cStatusDescription, 
                           cLastEditedBy, 
                           dtLastEditedAt) 
              VALUES      (@cServiceID, 
                           @cOrderID, 
                           @iTypeID, 
                           @iStatusID, 
                           @cStatusDescription, 
                           @cLastEditedBy, 
                           Getdate()) 

              -- INSERÇÃO DOS DADOS DA ORDEM 
              INSERT INTO TB_INT_OrderToSAP 
                          (cServiceID, 
                           cPlantID, 
                           cOrderID, 
                           cOrderType, 
                           cOrderVer, 
                           cLotID, 
                           cResourceID, 
                           dtStartProg, 
                           dtEndProg, 
                           dtStartReal, 
                           dtEndReal, 
                           iOrderStatusID, 
                           cLastEditedBy, 
                           dtLastEditedAt) 
              VALUES      (@cServiceID, 
                           @cPlantID, 
                           @cOrderID, 
                           @cOrderType, 
                           @cOrderVer, 
                           @cLotID, 
                           @cResourceID, 
                           @dtStartProg, 
                           @dtEndProg, 
                           @dtStartReal, 
                           @dtEndReal, 
                           @iOrderStatus, 
                           @cLastEditedBy, 
                           Getdate()) 

              --SEÇÃO DE LOG  
              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
              -- INSERT DAS TRANSAÇOES QUE FORAM EXECUTADAS NO LOG 
              INSERT INTO TB_IAS_TransactionLog 
                          (cServiceID, 
                           dtDate, 
                           sSQLTransaction, 
                           sStatus, 
                           cLastEditedBy, 
                           dtLastEditedAt) 
              VALUES      (@cServiceID, 
                           Getdate(), 
                           @sSQLTransaction, 
                           'Sucesso', 
                           @cLastEditedBy, 
                           Getdate()) 
          END TRY 

          BEGIN CATCH 
              -- INSERT DAS TRANSAÇOES QUE QUE NÃO EXECUTARAM NO LOG  
              INSERT INTO TB_IAS_TransactionLog 
                          (cServiceID, 
                           dtDate, 
                           sSQLTransaction, 
                           sStatus, 
                           cLastEditedBy, 
                           dtLastEditedAt) 
              VALUES      (@cServiceID, 
                           Getdate(), 
                           @sSQLTransaction, 
                           'Falha', 
                           @cLastEditedBy, 
                           Getdate()) 

              -- INSERT DO DETALHAMENTO DO ERRO, COM BASE NO REGISTRO DA TABELA LOG 
              INSERT INTO TB_IAS_TransactionLogError 
                          (iIdTransact, 
                           dtDate, 
                           iErrorNumber, 
                           iErrorSeverity, 
                           iErrorState, 
                           sSQLTransaction, 
                           sErrorMsg, 
                           sStatus, 
                           cLastEditedBy, 
                           dtLastEditedAt) 
              VALUES      (IDENT_CURRENT('TB_IAS_TransactionLog'), 
                           Getdate(), 
                           ERROR_NUMBER(), 
                           ERROR_SEVERITY(), 
                           ERROR_STATE(), 
                           @sSQLTransaction, 
                           ERROR_MESSAGE(), 
                           'Falha', 
                           @cLastEditedBy, 
                           Getdate()); 

              --GERAÇÃO DE ERRO PARA A APLICAÇÃO APÓS A INSERÇÃO NAS TABELAS DE LOG 
              THROW; 
          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
          END CATCH 
      END 

    Desde já, muito obrigado!

    Atenciosamente,

    Renan Fernandes
    quinta-feira, 25 de maio de 2017 17:51
  • Alguém conseguiria me ajudar com esta demanda?

    Atenciosamente,

    Renan Fernandes

    quarta-feira, 5 de julho de 2017 16:33
  • Vamos esquertejar por partes,

    1) vc ja fez um teste básico  nessa procedure algo asssim

    A) crie um banco teste

    B) crie as tabelas necessárias

    C) faz inserts nessas tabelas sem o uso da SP

    D) faz inserts nessas tabelas usando a SP 

    caso tudo certo 

    2)existe algum registro de falha ???

    3) caso não exista  e aqui talvez seja o problema

    a tabela TB_INT_OrderServiceToSAP tem trigger  associada a ela ??

    a tabela TB_INT_OrderToSAPtem trigger  associada a ela ??


    Wesley Neves - Brasilia-DF


    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"


    Wesley Neves



    Wesley Neves

    quarta-feira, 5 de julho de 2017 17:38