oracle - Oracle procedure not updating table
问题描述
I am running a simple procedure but with commit, but it does not work.
No SQLERROR is given.
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;
What am I doing wrong?
BTW, changing sh.status = status
to sh.status = 8
(for example). Works great.
Thanks in Advance - I am breaking my balls for 3 hours now.
Tried the following:
EXECUTE PKG_STATISTICS.change_status(1223,5);
and
BEGIN
PKG_STATISTICS.change_status(1223,5);
END;
and there is a line in STATISTICS_HANDLER
with id 1223
.
SOLUTION: Changing variable name from status to something else (not a column name) did the work.
解决方案
我相信 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;
推荐阅读
- javascript - setState 函数不适用于子组件
- javascript - 捕获 $.getJSON().done() 中抛出的错误
- java - 如何抓住破管子的插座?
- r - `dplyr` 的 `summarize_all()` 在某些条件下
- sql - SQL - 将所有子项组合成一行
- node.js - 我如何将对象存储在全局数组或任何数据结构中,以便我可以在我的程序中像数据库一样使用该数组
- c# - 将用户信息输入 MVC 的最佳方法是什么?
- php - OOP - Mysqi 连接:未捕获的错误:调用未定义的方法 DBConnection::prepare()
- java - 如何使用 Maven 运行特定测试套件的特定测试类的特定单元测试(JUnit 4)
- swift - 我怎样才能在同一个地方有一个按钮和滚动视图?