游标中的前一行oracle
我之所以在这里,是因为如果有一种方法可以返回循环游标中的前一个值以与当前值进行比较,我无法找到其他任何地方,例如 Cursor.Value=Cursor-1.Value 这是因为我有几个合同号,我需要通过邮件发送到商业部门,但是,为了恢复所有行,我想比较当前合同号是否与上一个合同号相同,并验证它以不发送重复的合同号 为了不发送重复的订单号,我需要跳过的记录示例:订单号是我的密钥,而不是顺序数字id: cCursor.Value=cCursor-1.Value cCursor.111=cCursor-1.111 我要保存以作为已处理订单号发送的记录示例:订单号是我的密钥,而不是顺序数字id: cCursor.Value=cCursor-1.Value cCursor.132=cCursor-1.111游标中的前一行oracle,oracle,loops,plsql,cursor,Oracle,Loops,Plsql,Cursor,我之所以在这里,是因为如果有一种方法可以返回循环游标中的前一个值以与当前值进行比较,我无法找到其他任何地方,例如 Cursor.Value=Cursor-1.Value 这是因为我有几个合同号,我需要通过邮件发送到商业部门,但是,为了恢复所有行,我想比较当前合同号是否与上一个合同号相同,并验证它以不发送重复的合同号 为了不发送重复的订单号,我需要跳过的记录示例:订单号是我的密钥,而不是顺序数字id: cCursor.Value=cCursor-1.Value cCursor.111=cCurso
我的问候。你问什么还不完全清楚 光标是仅向前的结构。您无法获取上一行,只能获取下一行或一组行。但是,您的查询肯定可以使用lag函数包含来自先前行的数据。例如,这将显示结果中前一行的ename
SELECT empno, ename, lag(ename) over (order by empno) prior_ename
FROM emp
ORDER BY empno
在PL/SQL循环中,显然还可以有一个局部变量,该变量包含从上一行获取的数据,并使用该数据与从最新行获取的数据进行比较。您不能向后引用。最简单的替代方法是将键值contract_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;
请使用分析功能检查前一行或后一行。超前、滞后函数是最好的方法。您的代码和光标是什么?你为什么不选择不同的记录呢?我不确定你的编辑是否澄清了什么。我在猜测您的伪代码的意图是什么,但看起来您仍然在谈论希望使用滞后函数。但你说这不是你感兴趣的,所以我有点困惑。如果您发布实际代码、示例数据、预期输出等,可能会更清楚。因为所有过程都发生在cGetCISINewOrders循环中的for cisiOrder中这是我的光标CGETCINEWORDERS是从这里开始的,我获取所有订单号好吧,这不是我想要的,但我可以设法弄明白吗,谢谢anyway@YuriAguirre-如果这不是你要问的,请随意编辑你的问题,以澄清你要问的是什么。我已经编辑了我的问题,也许现在你能更容易地理解它,抱歉我的解释不好。好吧,我一直试图用光标上的向后信息来做这件事,因为我们不能哈哈,我会听从你的建议,谢谢你的帮助