我正在运行一个简单的程序,但是使用了commit,但它不起作用。
没有给出SQLERROR。
PROCEDURE change_status (id NUMBER, status number) IS
BEGIN
DBMS_OUTPUT.PUT_LINE ('CHANGING STATUS TO: '|| status || ' id '|| id);
update STATISTICS_HANDLER sh set sh.status = status where sh.id = id;
DBMS_OUTPUT.PUT_LINE ('CHANGING STATUS TO: AFTER UPDATE '|| status || ' id '|| id);
commit;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('INSIDE change_status EXCEPTION ' || SQLERRM);
END;
我做错了什么?
顺便说一句,将sh.status = status
更改为sh.status = 8
(例如)。效果很好。
先谢谢 - 我现在打破了我的球3个小时。
尝试以下方法:
EXECUTE PKG_STATISTICS.change_status(1223,5);
和
BEGIN
PKG_STATISTICS.change_status(1223,5);
END;
STATISTICS_HANDLER
中有一行ID为1223
。
解: 将变量名称从状态更改为其他名称(不是列名称)可以完成工作。
答案 0 :(得分:2)
我认为Oracle无法正确执行更新查询,因为您使用的是与列名相同名称的过程参数。
PROCEDURE change_status (in_id NUMBER, in_status number) IS
BEGIN
DBMS_OUTPUT.PUT_LINE ('CHANGING STATUS TO: '|| in_status || ' in_id '|| in_id);
update STATISTICS_HANDLER sh set sh.status = in_status where sh.id = in_id;
DBMS_OUTPUT.PUT_LINE ('CHANGING STATUS TO: AFTER UPDATE '|| in_status || ' in_id '|| in_id);
commit;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('INSIDE change_status EXCEPTION ' || SQLERRM);
END;