Процедура Oracle не обновляет таблицу - PullRequest
0 голосов
/ 29 апреля 2018

Я выполняю простую процедуру, но с коммитом, но она не работает.

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 есть строка с идентификатором 1223.

РЕШЕНИЕ: Смена имени переменной с состояния на другое (не имя столбца) сработало.

1 Ответ

0 голосов
/ 29 апреля 2018

Я считаю, что 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;
...