代码之家  ›  专栏  ›  技术社区  ›  Luis Pavez

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

  •  0
  • Luis Pavez  · 技术社区  · 7 年前

    我在SQLServer2008中有了下一个SP。如果我从SQL SERVER管理(右键单击,执行存储过程)执行此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
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   tgolisch    7 年前

    查询中的问题,即步骤3,看起来像是将日期转换为字符串,然后尝试执行以下操作 DATEADD 在绳子上。你这样做会更安全 在转换为字符串之前。

    Before:(在your VALUES子句的中间)

    DATEADD(DAY,5, CONVERT(VARCHAR(10), GETDATE(), 103))
    

    修正:

    CONVERT(VARCHAR(10), DATEADD(DAY, 5, GETDATE()), 103)
    
        2
  •  0
  •   Luis Pavez    7 年前

    我被发送varchar到insert,格式为varchar。这条线不分小时发送日期,而且有效。

    DATEADD(DAY,5,(CAST(GETDATE() AS date)))