需要帮助将此PL / SQL(Oracle)脚本转换为T-SQL(SQL Server)

时间:2019-02-07 14:40:49

标签: sql sql-server stored-procedures

有人可以看看我将PL / SQL(Oracle)脚本转换为T-SQL(SQL Server)的尝试。我需要做的是创建一个存储过程。下面是原始的需要转换的文件,当我尝试它时总是给我错误:

4 个答案:

答案 0 :(得分:0)

这两行都错了:

DECLARE @V_BSCHEDNUM = MAX(BSCHEDNUM) FROM vm1data.BSSCPF;

SET BSCHEDNUM = V_BSCHEDNUM + 1 ;

第一行在SELECT符号后需要一个=

第二,我想您可能打算将变量设置为等于自身加1?如果是这样,则说明您缺少变量名称的@V_部分。

答案 1 :(得分:0)

应更正以下几行。您的声明缺少数据类型,变量名称中缺少@。

DECLARE @V_BSCHEDNUM = MAX(BSCHEDNUM) FROM vm1data.BSSCPF;

    SET BSCHEDNUM = V_BSCHEDNUM + 1 ;

尝试以下

DECLARE @V_BSCHEDNUM INT;
SELECT @V_BSCHEDNUM = MAX(BSCHEDNUM) FROM vm1data.BSSCPF;

    SET @V_BSCHEDNUM = ISNULL( @V_BSCHEDNUM, 0) + 1 ; --Added IsNull in case no rows in the table

您还缺少存储过程中的参数。

答案 2 :(得分:0)

DECLARE @V_BSCHEDNUM int = (SELECT MAX(BSCHEDNUM) FROM vm1data.BSSCPF);
DECLARE @BSCHEDNUM int = @V_BSCHEDNUM + 1 ;

convert(DATETIME, '19000101', 112), -- Update at the end of process

答案 3 :(得分:0)

请尝试以下操作:

如果您尝试将变量值插入VM1DTA.BSSCPF表中,则需要在INSERT语句中将'V_BSCHEDNUM'替换为@V_BSCHEDNUM

IF OBJECT_ID('"PKG_BNLX5_BATCH_START"', 'P') IS NOT NULL
  DROP PROCEDURE "PKG_BNLX5_BATCH_START";
GO

CREATE     PROCEDURE "PKG_BNLX5_BATCH_START" AS
  BEGIN
  SET NOCOUNT ON;
    DECLARE @V_BSCHEDNUM INT;
    SET @V_BSCHEDNUM = (SELECT MAX(ISNULL(BSCHEDNUM, 0))+1 FROM vm1data.BSSCPF);

    INSERT INTO VM1DTA.BSSCPF
      (BSCHEDNAM,
       BSCHEDNUM,
       BSHDSTATUS,
       BCURNOTHDS,
       BREQNOTHDS,
       BSUSERNAME,
       BSDATMINTD,
       BSDATMSTRT,
       BSDATMENDD,
       BPRCEFFDAT,
       BPRCACCYR,
       BPRCACCMTH,
       LANGUAGE,
       BSHDINITBR,
       BSPRSABORT,
       BSPRSFAILD,
       BSPSCMPLTD,
       BSPRSCANC,
       USRPRF,
       JOBNM,
       DATIME)
    VALUES
      ('c_jobnm',
       'V_BSCHEDNUM',
       '10',
       0,
       1,
       'c_usrprf',
       getdate(),
       getdate(),
       convert(DATETIME, '19000101', 'YYYYMMDD'), -- Update at the end of process
       getdate(),
       getdate(), 'YYYY',
       getdate(), 'MM',
       'E',
       '10',
       0,
       0,
       0, -- Update at the end of process
       0,
       'c_usrprf',
       'c_jobnm',
       getdate() -- Update at the end of processbschednam
       );
    COMMIT;
  END;