Member 13870077 Ответов: 1

Обновление более 1 строки в процедуре oracle


Мне было интересно, можно ли обновить более 1 строки с помощью процедуры, я не уверен, почему эта не работает. Он работает только в том случае, если в моей таблице есть только 1 строка. Но если там больше 1 строки я получаю обычное сообщение об ошибке :
ORA-01422: exact fetch returns more than requested number of rows


create or replace procedure TP3_SP_ARCHIVER_ENCAN
is

    V_CURRENT_DATE date;
    V_DATE_ENCAN date;

begin
    select sysdate, DATE_FIN_ENC into V_CURRENT_DATE, V_DATE_ENCAN from TP2_ENCAN;
    
    update TP2_ENCAN
    set EST_ARCHIVEE_ENC = 1,
    STATUT_ENC = 'Archivé'
    where V_CURRENT_DATE - V_DATE_ENCAN > 60;
  
    
end TP3_SP_ARCHIVER_ENCAN;
/


Что я уже пробовал:

Честно говоря, я не знаю, почему это не работает. Возможно ли, что процедура не может обновить более 1 строки одновременно ?

1 Ответов

Рейтинг:
2

Wendelius

Ошибка возникает из первого оператора, где вы пытаетесь извлечь значения нескольких строк, в то время как принимающие переменные (V_CURRENT_DATE, V_DATE_ENCAN) может содержать только одно значение.

Но помимо этого, насколько я могу судить, WHERE пункт UPDATE оператор основан исключительно на полученных единых значениях переменных, вы не используете никаких столбцов для ограничения строк. Другими словами, UPDATE оператор будет обновлять все строки или вообще не будет строк, в зависимости от значений....

Поэтому, если идея состоит в том, чтобы сделать обновление на основе значений отдельных строк, попробуйте что-то вроде

CREATE OR REPLACE PROCEDURE TP3_SP_ARCHIVER_ENCAN 
IS
BEGIN

    UPDATE TP2_ENCAN
    SET   EST_ARCHIVEE_ENC = 1,
          STATUT_ENC = 'Archivé'
    WHERE SYSDATE - DATE_FIN_EN > 60;

END TP3_SP_ARCHIVER_ENCAN;
/