1

如果 comm 为空,我需要将comm值更新为salary,即1100,但它没有得到更新。

我的数据是:

sal        comm    
9000    800
2975    800
3000    800
1100    
3000    800

我的代码是:

declare
  cursor c3 is select sal,comm,ename from emp where deptno=20
  for update of comm;
begin
  for c in c3
  loop
    if c.comm is null
    then
      update emp set comm=(select c.sal from emp e where e.comm=c.comm )
      where current of c3;
    end if;
  end loop;
end;

请给我意见。

4

3 回答 3

2

这一行:

update emp set comm=(select c.sal from emp e where e.comm=c.comm )

... 不管用。你知道c.comm它是空的,所以你试图找到一个emp具有匹配值的记录,你不能对null. 如果有多个记录 where commis ,这也不起作用null- 在这种情况下,sal它将使用哪个可能的值?

您根本不需要emp再次查询;select即使它有效,也是毫无意义的,因为您可以从正在更新的行中获取数据:

update emp set comm = sal
where current of c3;

if您还可以通过将光标更改为仅查找值来删除测试null

cursor c3 is select sal,comm,ename
  from emp
  where deptno=20
  and comm is null
  for update of comm;

但是正如其他答案已经指出的那样,您根本不需要在 PL/SQL 中执行此操作,一个简单的 SQLupdate就足够了。

于 2013-08-15T17:31:09.430 回答
1

以下应该有效:

update Employee
set com = sal
where com is null
于 2013-08-15T17:19:24.680 回答
1

这是一个简单的更新语句。

UPDATE YourTable SET comm = sal WHERE comm IS NULL

于 2013-08-15T17:19:24.993 回答