繁体   English   中英

使用链接服务器从SQL插入到ORACLE

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM