内联视图查询

时间:2012-01-27 21:42:29

标签: oracle view inline

我想删除我最近添加的一些记录,从这个表mytemp,请告诉我这个查询有什么问题, 已使用游标

填充所选列中的数据
DELETE FROM (SELECT ROWNUM RM, S from mytemp) where rm > 20;

错误是:

ORA-01732:此视图上的数据操作操作不合法

2 个答案:

答案 0 :(得分:2)

编辑准确性......

以下是您收到的错误说明:

http://ora-01732.ora-code.com/

  

尝试在a上使用UPDATE,INSERT或DELETE语句   包含表达式或函数或源自更多的视图   比一张桌子。如果使用连接操作来创建视图或   view包含从函数或表达式派生的虚拟列,   那么只能查询视图。

因此,只要它不连接多个表或使用虚拟列,看起来可以替换表的可更新视图。在您的情况下,问题是虚拟ROWNUM列。

答案 1 :(得分:1)

这是rownum>20声明。

ROWNUM> x,其中大于正整数的x值始终为false。

select * from ANYTABLE where rownum>(ANY POSITIVE INTEGER) 

不会返回任何记录。

为获取的第一行分配ROWNUM为1并使条件为false。要获取的第二行现在是第一行,并且还指定了ROWNUM为1并使条件为false。所有行随后都不满足条件,因此不返回任何行。

检查 THIS 以获取更多信息。

您可以执行以下操作:

delete from (select amount from TABLE t where t.amount=1000)

但与

相同
delete from TABLE where amount=1000