所以我的内部更新语句运行。这里的逻辑应该规定这个循环运行一次然后结束。相反,我得到一个"查询无效"错误。当我注释掉更新时,它也会失败。
BEGIN ---each update would only change some to BBT that were not already. We can cycle through the last 3 tech titles
DECLARE i INT;
SET i=1;
WHILE i<2 DO
BEGIN
UPDATE a
FROM DLBIFO.ML_BBT a,
(SELECT DimFsclMthSk, hrnum, AsscId, TitlNm, caldt, 'BBT' AS ScrcrdInd --006
FROM (
SELECT tech.*, ROW_NUMBER() OVER (PARTITION BY hrnum, DimFsclMthSk ORDER BY caldt DESC) AS num, DimFsclMthSk, caldt
FROM XBITblsV.DimEmployee tech,
(SELECT DimDateSk, DimFsclMthSk, caldt
FROM XBITblsV.DimDate
WHERE DimDateSk >= 20170322
AND DimDateSk <= 20170523) tdim
WHERE tdim.caldt >= tech.effdttm
AND tdim.caldt < expdttm
AND DimEmployeeSk <> -1
QUALIFY ROW_NUMBER() OVER (PARTITION BY hrnum, DimFsclMthSk ORDER BY effdttm DESC) = i
) a,
XBIMdmV.MdmTechOpsScrcdTitle b
WHERE a.caldt >= busstartdt AND a.caldt < COALESCE(busenddt, DATE'2099-01-01')
AND TitlNm = b.techtitle) BBT
SET ScrcrdInd = BBT.ScrcrdInd
WHERE a.DimFsclMthSk = bbt.DimFsclMthSk
AND a.AsscId = bbt.AsscId ;--006
/*SELECT TOP 1 * FROM DLBIFO.ML_BBT;*/
SET i=i+1;
END;
end while;
END;
答案 0 :(得分:0)
尝试在set i = i + 1;
和END
之间移动END WHILE
。