Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка при написании пакета 
V
    Опции темы
s_a_s_h_a
Дата 19.3.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



написал такой пакет

Код

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;

в приложении вызываю один раз функцию из этого пакета. Первый запрос обновляет ВСЕ записи в таблице, а все остальные запросы выполняется по одному разу. В чем ошибка? 
PM MAIL   Вверх
Sqlninja
Дата 19.3.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



Ошибки нет. 


--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
LSD
Дата 19.3.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Проблема в 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';



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Sqlninja
Дата 19.3.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



Нуу, так не интересно, нужно было чтоб он сам догадался )


--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
s_a_s_h_a
Дата 19.3.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



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


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

Это сообщение отредактировал(а) s_a_s_h_a - 19.3.2008, 16:45
PM MAIL   Вверх
Sqlninja
Дата 19.3.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



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


--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.