Inquiridor
Procedure confirmou execução, mas não obteve o resultado esperado.

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
Todas as Respostas
-
-
-
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 -
-- 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 -
-
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
- Sugerido como Resposta Junior Galvão - MVPMVP domingo, 23 de dezembro de 2018 23:38