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