【发布时间】:2017-02-10 09:55:51
【问题描述】:
出于学习目的,我创建了一个虚拟数据库,并故意在其中一个表中创建了一些重复的记录。在每种情况下,我都想将其中一条重复记录标记为 Latest='Y',将另一条记录标记为 'N',并且对于每条记录,Latest 标记将是 'Y'。
我尝试使用 PlSQL 来检查我的所有记录,但是当我尝试使用之前计算的值(这会表明它是重复记录)时,它会说:
ORA-06550:第 20 行,第 17 列: PLS-00201:必须声明标识符“COUNTER”
这是我尝试使用的语句:
DECLARE
CURSOR cur
IS
SELECT order_id, order_date, person_id,
amount, successfull_order, country_id, latest, ROWCOUNT AS COUNTER
FROM (SELECT order_id,
order_date,
person_id,
amount,
successfull_order,
country_id,
latest,
ROW_NUMBER () OVER (PARTITION BY order_id, order_date,
person_id, amount, successfull_order, country_id
ORDER BY order_id, order_date,
person_id, amount, successfull_order, country_id) ROWCOUNT
FROM orders) orders
FOR UPDATE OF orders.latest;
rec cur%ROWTYPE;
BEGIN
FOR rec IN cur
LOOP
IF MOD (COUNTER, 2) = 0
THEN
UPDATE orders
SET latest = 'N'
WHERE CURRENT OF cur;
ELSE
UPDATE orders
SET latest = 'Y'
WHERE CURRENT OF cur;
END IF;
END LOOP;
END;
我是 PlSQL 的新手,所以我尝试修改我在这里找到的语句: http://www.adp-gmbh.ch/ora/plsql/cursors/for_update.html
我应该在我的陈述中改变什么,或者我应该使用不同的方法?
提前感谢您的回答! 波顿
【问题讨论】:
-
您应该从光标引用访问它,例如
MOD (rec.COUNTER, 2)
标签: oracle plsql sql-update cursor