WHERE CURRENT OF 引发和无效的 rowid 错误
Posted
技术标签:
【中文标题】WHERE CURRENT OF 引发和无效的 rowid 错误【英文标题】:WHERE CURRENT OF raising and invalid rowid error 【发布时间】:2014-05-21 11:42:00 【问题描述】:我正在尝试将每个客户的年龄增加 1 并显示它们;使用光标。
这是表结构。
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
这是我的代码:
DECLARE
c_id customers.id%TYPE;
c_name customers.name%TYPE;
c_age customers.age%TYPE;
CURSOR c1 IS
SELECT id, name, age
FROM customers
FOR UPDATE OF salary;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO c_id, c_name, c_age;
UPDATE customers
SET age = age + 1
WHERE CURRENT OF c1;
EXIT WHEN c1%NOTFOUND;
dbms_output.put_line( c_id || ' ' || c_name || ' ' || c_age );
END LOOP;
CLOSE c1;
END;
/
但是,我收到以下错误:
Error report:
ORA-01410: invalid ROWID
ORA-06512: at line 13
01410. 00000 - "invalid ROWID"
*Cause:
*Action:
1 Ramesh 32
2 Khilan 25
3 kaushik 23
4 Chaitali 25
5 Hardik 27
6 Komal 22
为什么会发生这种情况,我该如何阻止它?
【问题讨论】:
请格式化问题 您可以建议编辑@rpax,这是 OP 的第一篇文章。自己制定问题的格式并为将来如何做提供指导可能会更有帮助。 谢谢@rpax。我尝试从头开始对其进行格式化,但无能为力。任何格式化提示也会有所帮助。 @Ben 抱歉,我的手机很难编辑问题。 WamglindCarmasaic,你可以看看***.com/editing-help 表“客户”实际上是一个视图吗? 【参考方案1】:你的exit
放错地方了;它应该在fetch
之后。您正在正确处理您的六个真实行,但是您有第七次提取 - 之后 %notfound
将是 true
- 所以没有“当前”行要更新。在尝试对该无效行执行任何操作之前,您需要退出。
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO c_id, c_name, c_age;
EXIT WHEN c1%NOTFOUND;
UPDATE customers
SET age = age + 1
WHERE CURRENT OF c1;
dbms_output.put_line( c_id || ' ' || c_name || ' ' || c_age );
END LOOP;
CLOSE c1;
END;
希望这只是一个练习,因为它不是一种非常有效的更新方式。
【讨论】:
谢谢亚历克斯。它现在工作正常。是的,这只是为了练习:)以上是关于WHERE CURRENT OF 引发和无效的 rowid 错误的主要内容,如果未能解决你的问题,请参考以下文章
Oracle/PLSQL WHERE CURRENT OF Statement
postgresql/lightdb中WHERE CURRENT OF的使用