PL/SQL更新的ROWID无效



我尝试更新工资,但得到错误:

无效ROWID

原因:ROWID输入错误。rowid必须输入为仅使用数字和字符A的格式化十六进制字符串典型的ROWID格式为'000001F8.0001.0006'。

这是我的代码

DECLARE 
    CURSOR get_sls(mgr NUMBER, dep VARCHAR2) IS 
      SELECT * 
        FROM emp_n_m
       WHERE emp_n_m.mgr = mgr 
        FOR UPDATE OF emp_n_m.sal ;
BEGIN 
  OPEN get_sls(7902, 'SALES');
  if (get_sls%notfound) then
     dbms_output.put_line('incorrect mgr');
  else
    UPDATE emp_n_m
       SET emp_n_m.sal = emp_n_m.sal + 50
     WHERE CURRENT OF get_sls;  
    COMMIT; 
  end if;
  CLOSE get_sls;
END;
/ 

应该可以:

DECLARE 
    CURSOR get_sls(mgr NUMBER, dep VARCHAR2) IS 
      SELECT * 
        FROM emp_n_m
       WHERE emp_n_m.mgr = mgr 
        FOR UPDATE OF emp_n_m.sal ;
  v_emp get_sls%rowtype;
BEGIN 
  OPEN get_sls(7902, 'SALES');
  FETCH get_sls INTO v_emp;
  if (get_sls%notfound) then
     dbms_output.put_line('incorrect mgr');
  else
    UPDATE emp_n_m
       SET emp_n_m.sal = emp_n_m.sal + 50
     WHERE CURRENT OF get_sls;  
    COMMIT; 
  end if;
  CLOSE get_sls;
END;
/ 

在您的案例中真的需要游标吗?在DML操作中完成这一点不是很有效吗?

你要做的就是从销售部更新经理7902的薪水…

UPDATE emp_n_m SET emp_n_m.sal = emp_n_m.sal + 50 
WHERE emp_n_m.mgr =  7902
AND dept = 'SALES';
COMMIT; 

最新更新