[英]Insert from SQL to ORACLE with LINKED SERVER
我在sql server 2008中有下一个SP。如果从SQL SERVER MANAGMENT执行该SP(单击鼠标右键,执行存储过程),则没有任何问题,一切都正确执行,但是当从Web调用此SP时(服务器外部的网页),则不会执行步骤3。 此步骤使用链接服务器到Oracle 11G。 日志记录下一个错误:
从字符串转换日期和/或时间时转换失败
USE [Boton_Pago_Plus]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[PC_Guarda_Transaccion]
(@id_intento int,@RUTSINGUION nchar(12),@valor_pagado numeric, @id_Servipag int, @datos_Servipag nchar(300))
AS
BEGIN
Set ANSI_NULLS ON;
Set ANSI_WARNINGS ON;
SET NOCOUNT ON;
BEGIN TRY
-- Insert statements for procedure here
DECLARE @RUTSINGUION VARCHAR(500);
DECLARE @INDEXRUT INT;
--STEP 1
INSERT INTO Transaccion (Rut_cliente,Valor_pagado,Id_servipag,Fecha_ingreso,Datos_servipag,Id_intento)
VALUES (@RUTSINGUION,@valor_pagado,@id_Servipag,GETDATE(),@datos_Servipag,@id_intento);
--STEP 2
UPDATE Intento SET Fecha_cierre = GETDATE(), Boleta = @id_Servipag where Id_intento = @id_intento;
--STEP 3
INSERT OPENQUERY (ORA_PEHUEN_PLUS_UTILS, 'SELECT * FROM METLIFE.BLACKLIST')
VALUES (@RUTSINGUION,'METLF','CL',1,NULL,CONVERT(VARCHAR(10), GETDATE(), 103),DATEADD(DAY,5, CONVERT(VARCHAR(10), GETDATE(), 103))
,'servipag',CONVERT(VARCHAR(10), GETDATE(), 103),'PAGO SERVIPAG','Inhibido 5 dias pago servipag')
END TRY
BEGIN CATCH
INSERT INTO LOG_ERROR
(
NUMERO_ERROR ,
SEVERIDAD_ERROR ,
ESTADO_ERROR ,
PROCEDIMIOENTO ,
LINEA_ERROR ,
MENSAJE,
FECHA_ERROR
)
SELECT ERROR_NUMBER() AS errNumber
, ERROR_SEVERITY() AS errSeverity
, ERROR_STATE() AS errState
, ERROR_PROCEDURE() AS errProcedure
, ERROR_LINE() AS errLine
, ERROR_MESSAGE() AS errMessage,
GETDATE()
END CATCH
END
查询中的问题(第3步)似乎是将日期转换为字符串,然后尝试对字符串执行DATEADD
。 如果在转换为字符串之前进行了DATEADD
,将会更安全。
之前:(在VALUES子句的中间)
DATEADD(DAY,5, CONVERT(VARCHAR(10), GETDATE(), 103))
固定:
CONVERT(VARCHAR(10), DATEADD(DAY, 5, GETDATE()), 103)
我将varchar发送到具有转换格式varchar的插入中。 该行发送不带小时的日期,并且有效。
DATEADD(DAY,5,(CAST(GETDATE() AS date)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.