我尝试更新工资,但得到错误:
无效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;