【问题标题】:Convert Stored Procedure of Oracle to SQL Server将Oracle的存储过程转换为SQL Server
【发布时间】:2018-05-06 22:10:18
【问题描述】:

我有一个存储过程,它被编译并存储在 Oracle 数据库中。我想转换然后在 SQL Server 中运行这个存储过程。

这是 Oracle 中的存储过程 - 如何将此代码转换为 SQL Server 以在此上运行?

create or replace PROCEDURE "SP_ora" (
IN_CD IN NUMBER,
IN_LOCAL IN NUMBER,
IN_INI IN  VARCHAR2,
IN_FIN IN   VARCHAR2,
cv_1 OUT SYS_REFCURSOR)
AS
V_INI1 VARCHAR2(30);
V_FIN1 VARCHAR2(30);
V_INI2 TIMESTAMP;
V_FIN2 TIMESTAMP;
V_LOCAL NUMBER(5);
BEGIN
 IF IN_LOCAL=0 THEN
  V_LOCAL := null;
 ELSE
  V_LOCAL:=IN_LOCAL;
 END IF;

 IF IN_INI IS NOT NULL THEN
  V_INICIO2 := TO_TIMESTAMP(CONCAT(IN_INI, ' 00:00:00'), 'dd/MM/yy 
  HH24:MI:SS');
 END IF;

 IF IN_FIN IS NOT NULL THEN
  V_FIN2 := TO_TIMESTAMP(CONCAT(IN_FIN, ' 23:59:59'), 'dd/MM/yy HH24:M 
  I:SS');
 END IF;

OPEN cv_1 FOR
SELECT TB_LOG_E.FE_FLAG2 AS fecha,
TB_HEAD_PPL.GLS_STORE
|| '-'
|| TB_STORE_INFO.STORE_NAME               AS CD,
TB_HEAD_PPL.FOLIO_PPL_SII                 AS guia,
TB_FOLIO_PPL_COD_VISACION.CODIGO_VISACION AS cod_visacion
FROM TB_HEAD_PPL
INNER JOIN TB_LOG_EJECUCION ON TB_HEAD_PPL.ID_HEAD_PPL =  
TB_LOG_EJECUCION.ID_HEAD_PPL AND TB_HEAD_PPL.ID_CD_NBR  = 
TB_LOG_EJECUCION.ID_CD_NBR
LEFT JOIN TB_FOLIO_PPL_COD_VISACION ON TB_HEAD_PPL.FOLIO_PPL_SII = 
TB_FOLIO_PPL_COD_VISACION.FOLIO_SII
INNER JOIN TB_STORE_INFO ON TB_HEAD_PPL.GLS_STORE = TB_STORE_INFO.STORE_NBR
LEFT JOIN TB_DETAIL_PPL D ON TB_HEAD_PPL.ID_HEAD_PPL = D.ID_HEAD_PPL
LEFT JOIN tb_item i ON D.GLS_ITEM_NBR = i.ITEM_NBR
where TB_LOG_EJECUCION.FECHORA_FLAG02 BETWEEN NVL(V_INICIO2, 
TB_LOG_EJECUCION.FECHORA_FLAG02) AND NVL(V_FIN2, 
TB_LOG_EJECUCION.FECHORA_FLAG02)
AND TB_HEAD_PPL.ID_CD_NBR = IN_CD AND TB_HEAD_PPL.GLS_STORE = NVL(V_LOCAL, 
TB_HEAD_PPL.GLS_STORE)
AND i.ITEM_DEPT_NBR = 83 and D.GLS_PRODUCTION_LOT_NUMBER is not null
GROUP BY TB_LOG_EJECUCION.FECHORA_FLAG02,
TB_HEAD_PPL.GLS_STORE
|| '-'
||  TB_STORE_INFO.STORE_NAME,
TB_HEAD_PPL.FOLIO_PPL_SII,
TB_FOLIO_PPL_COD_VISACION.CODIGO_VISACION
ORDER BY fecha;
END;

【问题讨论】:

    标签: sql-server oracle tsql stored-procedures plsql


    【解决方案1】:
    if object_id('"SP_INFORME_FOLIO_COD_VISACION"', 'P') is not null
      drop procedure "SP_INFORME_FOLIO_COD_VISACION";
    go
    
    create PROCEDURE "SP_INFORME_FOLIO_COD_VISACION" (
    @IN_CD FLOAT,
    @IN_LOCAL FLOAT,
    @IN_INICIO  VARCHAR(4000),
    @IN_FIN   VARCHAR(4000)
    )
    AS
    BEGIN
    DECLARE @V_INICIO1 VARCHAR(30);
    DECLARE @V_FIN1 VARCHAR(30);
    DECLARE @V_INICIO2 DATETIME2(6);
    DECLARE @V_FIN2 DATETIME2(6);
    DECLARE @V_LOCAL INT;
    
    SET NOCOUNT ON;
     IF @IN_LOCAL=0 BEGIN
      SET @V_LOCAL = null;
     END
     ELSE BEGIN
      SET @V_LOCAL=@IN_LOCAL;
     END 
    
     IF @IN_INICIO IS NOT NULL BEGIN
      SET @V_INICIO2 = CONVERT(VARCHAR(10), @IN_INICIO, 104) + ' ' + CONVERT(VARCHAR(8), @IN_INICIO, 108);
     END 
    
     IF @IN_FIN IS NOT NULL BEGIN
      SET @V_FIN2 = CONVERT(VARCHAR(10), @IN_FIN, 104) + ' ' + CONVERT(VARCHAR(8), @IN_FIN, 108);
     END 
    
    SELECT TB_LOG_EJECUCION.FECHORA_FLAG02 AS fecha,
    ISNULL(TB_HEAD_PPL.GLS_STORE, '')+ '-'+ ISNULL(TB_STORE_INFO.STORE_NAME, '') AS CD,
    TB_HEAD_PPL.FOLIO_PPL_SII   AS guia,
    TB_FOLIO_PPL_COD_VISACION.CODIGO_VISACION AS cod_visacion
    FROM TB_HEAD_PPL
    INNER JOIN TB_LOG_EJECUCION 
        ON TB_HEAD_PPL.ID_HEAD_PPL =  TB_LOG_EJECUCION.ID_HEAD_PPL AND TB_HEAD_PPL.ID_CD_NBR  = TB_LOG_EJECUCION.ID_CD_NBR
    LEFT JOIN TB_FOLIO_PPL_COD_VISACION 
        ON TB_HEAD_PPL.FOLIO_PPL_SII = TB_FOLIO_PPL_COD_VISACION.FOLIO_SII
    INNER JOIN TB_STORE_INFO 
        ON TB_HEAD_PPL.GLS_STORE = TB_STORE_INFO.STORE_NBR
    LEFT JOIN TB_DETAIL_PPL D 
        ON TB_HEAD_PPL.ID_HEAD_PPL = D.ID_HEAD_PPL
    LEFT JOIN tb_item i 
        ON D.GLS_ITEM_NBR = i.ITEM_NBR
    where TB_LOG_EJECUCION.FECHORA_FLAG02 BETWEEN ISNULL(@V_INICIO2, TB_LOG_EJECUCION.FECHORA_FLAG02) AND ISNULL(@V_FIN2, TB_LOG_EJECUCION.FECHORA_FLAG02)
        AND TB_HEAD_PPL.ID_CD_NBR = @IN_CD AND TB_HEAD_PPL.GLS_STORE = ISNULL(@V_LOCAL, TB_HEAD_PPL.GLS_STORE)
    AND i.ITEM_DEPT_NBR = 83 and D.GLS_PRODUCTION_LOT_NUMBER is not null
    GROUP BY TB_LOG_EJECUCION.FECHORA_FLAG02, ISNULL(TB_HEAD_PPL.GLS_STORE, '')+ '-'+  ISNULL(TB_STORE_INFO.STORE_NAME, ''),
    TB_HEAD_PPL.FOLIO_PPL_SII, TB_FOLIO_PPL_COD_VISACION.CODIGO_VISACION
    ORDER BY fecha;
    END;
    

    Convert Online

    HTH!

    【讨论】:

    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 2020-10-12
    • 2014-11-01
    • 1970-01-01
    • 2021-08-17
    • 2020-06-06
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多