PL / SQL无效ROWID用于更新

时间:2016-10-18 11:01:29

标签: oracle plsql rowid

我尝试更新薪水,但收到错误:

  

无效的ROWID

     

原因:输入的ROWID不正确。 ROWID必须输入为   格式化的十六进制字符串仅使用数字和字符A.   通过F.典型的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;
/ 

2 个答案:

答案 0 :(得分:0)

这应该有效:

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;
/ 

答案 1 :(得分:0)

您的情况下光标是否真的需要?在DML操作中完成这项工作会不会有效率?

您要做的就是从dept'SALES ...

更新经理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;