我尝试更新薪水,但收到错误:
无效的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;
/
答案 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;