Oracle程序没有更新表

时间:2018-04-29 15:32:03

标签: oracle stored-procedures plsql

我正在运行一个简单的程序,但是使用了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

解: 将变量名称从状态更改为其他名称(不是列名称)可以完成工作。

1 个答案:

答案 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;