Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > ошибка при написании пакета


Автор: s_a_s_h_a 19.3.2008, 15:39
написал такой пакет

Код

create or replace package body dd_refusal_at_request_folders as
 function dd_refuse (id_folder in number, id_user_l in number, refuse_comment in varchar2) return number
 is
      id_last_history number;
 begin
       update DD_HISTORY set R_DATE = sysdate, R_COMMENT = refuse_comment, STATUS = 'H', TYPE_REC = 'R'  
                       where ID_FOLDER = id_folder and STATUS = 'A';
      
       insert into DD_HISTORY (ID,ID_FOLDER,ID_USER_L,L_DATE,STATUS) 
                     values (SEQ_DD_HISTORY.NEXTVAL, id_folder, id_user_l, sysdate, 'A');

           select SEQ_DD_HISTORY.CURRVAL into id_last_history from dual;

       update DD_FOLDERS set ID_LAST_HISTORY = id_last_history, STATUS = 1 
                       where ID = id_folder;
      commit;
      
      return(1);
    
  exception 
     when others then
            rollback;
            return(-1);                  
         
 end dd_refuse; 
 
end dd_refusal_at_request_folders;

в приложении вызываю один раз функцию из этого пакета. Первый запрос обновляет ВСЕ записи в таблице, а все остальные запросы выполняется по одному разу. В чем ошибка? 

Автор: Sqlninja 19.3.2008, 16:20
Ошибки нет. 

Автор: LSD 19.3.2008, 16:33
Проблема в ID_FOLDER = id_folder это условие всегда true. От того что ты написал один литерал большими буквами, ничего не изменится, это эквивалентно id_folder = id_folder.
Надо писать так:
Код

update DD_HISTORY h set h.R_DATE = sysdate, h.R_COMMENT = refuse_comment, h.STATUS = 'H', h.TYPE_REC = 'R'  
 where h.ID_FOLDER = id_folder and h.STATUS = 'A';

Автор: Sqlninja 19.3.2008, 16:38
Нуу, так не интересно, нужно было чтоб он сам догадался )

Автор: s_a_s_h_a 19.3.2008, 16:44
Спасибо, LSD.
правда, решил, что лучше будет переименовать параметры и переменные (добавить суффиксы)


догадался... дело не в моей тупости, а в невнимательности... с этим сложнее бороться smile

Автор: Sqlninja 19.3.2008, 17:16
Если придерживаться стиля или соглашений по именованию (code conventions), что есть атрибут кода любого профи-программера, таких ошибок возникать не будет. Затраченное на выработку стиля время с лихвой окупается при разработке сложной логики.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)