Здравствуйте!! Пожалуйста, Не проявите ленивость, Обратите внимание!!!
У меня есть пакет RASUL_PKG, которого я сейчась опишу:
CREATE OR REPLACE PACKAGE ADBOLNICA.rasul_pkg is
procedure set_initial_state;
procedure save_id_p (uch number, id number);
procedure calc_vrem_preb;
cnt number := 0 ;
uch_in number;
end;
Тело пакета:
CREATE OR REPLACE PACKAGE BODY ADBOLNICA.rasul_pkg is
type istoria_table is table of number index by pls_integer;
id_patient istoria_table;
empty istoria_table;
procedure set_initial_state is
begin
cnt:=cnt+1;
if (cnt=1) then
id_patient := empty;
end if;
end;
procedure save_id_p (uch number, id number) is
begin
id_patient(uch):=id;
end;
procedure calc_vrem_preb is
--declare
date_v date;
date_p date;
begin
if cnt=1 then
uch_in := id_patient.first;
end if;
while uch_in is not null loop
select date_vipes into date_v from istoria where uch_nom = uch_in and id_p = id_patient(uch_in);
select date_post into date_p from istoria where uch_nom = uch_in and id_p = id_patient(uch_in);
if (cnt<=2) then
if (date_v is null) then begin cnt:=1;
update istoria set vrem_prebivania=0 where uch_nom=uch_in; end;
else begin cnt:=1;
update istoria set vrem_prebivania=trunc(date_v-date_p) where uch_nom=uch_in; end;
end if;
end if;
id_patient.delete(uch_in);
uch_in:=id_patient.next(uch_in);
end loop; cnt:=0;
end;
end;
И есть три UPDATE триггера, на таблицу ISTORIA. Таблица имеет такие поля, как UCH_NOM(primary key), ID_P, DATE_POST, DATE_VIPES, VREM_PRIBIVANIE. При обновлении строки этой таблицы, триггеры дожны вызывать процедур в пакете RASUL_PKG, которые в свою очередь организують вычисления значения поля VREM_PRIBIVANIE (VREM_PREBIVANIE=DATE_VIPES-DATE_POST) этой строки. Вот програмный код этих триггер.
CREATE OR REPLACE TRIGGER ADBOLNICA.rasul_trg3
before update
on istoria
begin
rasul_pkg.set_initial_state;
end;
CREATE OR REPLACE TRIGGER ADBOLNICA.rasul_trg4
after update on istoria
FOR EACH ROW
begin
rasul_pkg.save_id_p(:new.uch_nom,:new.id_p);
end;
CREATE OR REPLACE TRIGGER ADBOLNICA.rasul_trg5
After update
on istoria
begin
rasul_pkg.calc_vrem_preb;
end;
Для уточнения: Создал я этих трех триггер во избежании ошибки МУТИРУЮЩИИ ТАБЛИЦЫ. А переменную CNT в теле пакета ввел во избежании ошибки рекурсивных вызовов этих триггер (Обратите внимание, в теле пакета есть DML команда Update, который в свою очередь будет вызывать этих триггер заново)
Делаю Апдейт таблицы ISTORIA командой UPDATE istoria SET date_vipes=sysdate where ID_P>=2 and ID_P<=5. Обновляется 4 записей. Но вычеслен значение поля VREM_PRIBIVANIE только у одной строки, у которой значение поля ID_P=2.
Вопрос: Правильно ли програмный код моего пакета??????? Где я ошибся????? ИЛИ что вы посоветуете, чтоб триггеры вычисляли значения поля VREM_PREBIVANIE всех записи, которых я обновлял с помощью командой:
UPDATE istoria SET date_vipes=sysdate where ID_P>=2 and ID_P<=5.
????????????
Правильно ли я программирую?
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: Правильно ли я программирую?
Базы то бывают разные, вы о чем?
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
-
- проходил мимо
- Сообщения: 5
- Зарегистрирован: 2011-10-05 6:54:25
Re: Правильно ли я программирую?
ORACLE 10g Enterprise Edition
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: Правильно ли я программирую?
Это вы сильно, нечего даже сказатьraulr писал(а):ORACLE 10g Enterprise Edition

BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
- vadim64
- майор
- Сообщения: 2101
- Зарегистрирован: 2009-09-17 15:15:26
- Откуда: Засратовец
Re: Правильно ли я программирую?
оракл любит нелитеральные запросы
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.