我在这里,因为如果有办法在循环(Cursor)中返回先前的值以与当前值进行比较,我无法在其他任何地方找到它,例如..
Cursor.Value = Cursor-1.Value;
这是因为我需要通过邮件发送到商业部门的几个合同号码,但是,如果当前合同号码与上一个合同号码相同并且验证,则为了恢复我要比较的所有行它不发送重复的合同号码。
记录的例子我要跳过以便不发送重复的“订单号”:( Order_Number是我的密钥,而不是顺序数字ID):
cCursor.Value = cCursor-1.Value
cCursor。(111)= cCursor-1。(111)
我要保存的记录的例子,以便作为已处理的“订单号”发送:( Order_Number是我的密钥,而不是顺序数字ID):
cCursor.Value = cCursor-1.Value
cCursor。(132)= cCursor-1。(111)
我的问候。
答案 0 :(得分:3)
你无法向后引用。最简单的替代方法是将键值(契约id)存储在变量中,并具有如下逻辑:
DECLARE
CURSOR c1 IS .....;
vLastContractID NUMBER := 0;
BEGIN
FOR r1 IN c1 LOOP
IF vLastContractID != r1.CONTRACT_ID THEN
-- do something
vLastContractID := r1.CONTRACT_ID;
END IF;
END LOOP;
END;
答案 1 :(得分:2)
你的要求并不完全清楚。
游标是仅向前结构。您无法获取前一行,只能获取下一行(或一组行)。但是,您的查询当然可以使用lag
函数包含先前行中的数据。例如,这会显示结果中前一行的ename
SELECT empno, ename, lag(ename) over (order by empno) prior_ename
FROM emp
ORDER BY empno
在PL / SQL循环中,您显然还可以拥有一个局部变量,该变量具有从上一行获取的数据,并使用该变量与最新行的数据进行比较。
答案 2 :(得分:0)
请使用ANALYTICAL函数检查先行或后续行。 LEAD,LAG功能是最好的方法。