我想更新emp表的第2条-第10条记录,我的代码如下:
update (
select empno,ename,rn
from
(select empno,ename,rownum rn from emp)a
where (a.rn between 2 and 10)
)
set ename=concat(ename,rn);
但总是提示:ORA-01733: virtual column not allowed here(在这里不允许出现虚拟的列);
请问该怎么做才行呢?
update (
select empno,ename,rn
from
(select empno,ename,rownum rn from emp)a
where (a.rn between 2 and 10)
)
set ename=concat(ename,rn);
但总是提示:ORA-01733: virtual column not allowed here(在这里不允许出现虚拟的列);
请问该怎么做才行呢?
merge into emp
using (select * from (select empno,rownum rn from emp) t
where t.rn between 2 and 10) t
on(t.empno=emp.empno)
when matched then
update set
ename=concat(ename,t.rn)--结果
SQL> select ename from emp;ENAME
----------
SMITH
ALLEN2
WARD3
JONES4
MARTIN5
BLAKE6
CLARK7
SCOTT8
KING9
TURNER10
ADAMS
JAMES
FORD
MILLER
where b.rn>=2 and b.rn<=10 and b.empno=a.empno)
where empno in(select empno from (select empno,ename,rownum rn from emp) c
where c.rn between 2 and 10 )
aspen写的那样
set cola=colb里面的子查询必须是两个表中存在的
set asal = bsal,
acomm = bcomm;类视图的更新方法,这也是oracle所独有的。先把对应的数据全部抽取出来,然后更新表一样更新数据,这里需要注意的是,必须保证表的数据唯一型。这是我在网上的资料。不过他是两张表连接更新。而我的需求只是变成了一张表。但思路应该都一样,如果像你说的不是物理表所以不能更新的话,那网上的这种方法也不行咯
update(select a.id,b.col colb,a.col cola from tb a,tb2 b where a.id=b.id and rownum=1)
set cola=colb里面的子查询的显示结果列必须是两个表中存在的 而且错误已经有很明显的提示了 就是实在的列 不是虚拟的
aspen的merge into就很好