Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Сообщение для тригера в PL/SQL

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Сообщение для тригера в PL/SQL
Имя
Сообщение << Старые топики   Новые топики >>
Сообщение для тригера в PL/SQL - 2008-11-04 17:27:31.320000   
AsteroidG

Сообщений: 4
Оценки: 0
Присоединился: 2008-05-20 16:12:37.140000
Подскажите пожалуста как можно вывести сообщение когда выполняется тригер.
На падобие я вел один продукт у него количество продажы истеклаб мне нужно чтобы тригер показал сообщение что его нету на складе но не блокировал эту запись просто он должен информировать а не бдокировать.
Post #: 1
RE: Сообщение для тригера в PL/SQL - 2008-11-05 09:04:48.540000   
Pupkin-Zade

Сообщений: 9398
Оценки: 1489
Присоединился: 2004-03-10 13:54:16
Ну так пишешь тригер на SELCT и в нем возвращаешь сообщение, в чем проблема то?
Post #: 2
RE: Сообщение для тригера в PL/SQL - 2008-11-05 09:26:27.883333   
AsteroidG

Сообщений: 4
Оценки: 0
Присоединился: 2008-05-20 16:12:37.140000
//Pupkin-Zade
Я имел введу что мне нужна какаят-о функция (в моем случае МSG но она использует
RAISE_APPLICATION_ERROR(AError, AText)
) которая при реагировании тригера на ввод неправильных данных вывела в моем приложение (приложение написано на C++ Builder) которая использует Oracle 10 g, сообщение о недостоверности водимых данных и рарешала бы дальше работать и не блокировала эту запись как делает RAISE_APPLICATION_ERROR.
 
Тригер имеет вид:

CREATE OR REPLACE TRIGGER UN4.TRiG_Ver_Cant instead OF

INSERT OR UPDATE ON UN4.VMDB_CMN202D FOR EACH ROW
DECLARE CA NUMBER;

eroare EXCEPTION;
BEGIN

&nbsp;
ca:=Un$sold.CALC_SOLD(sysdate,

2161,

' ',

:new.ctsc,

:new.ctdep,

' ',

' ',

' ',

' ',

' ',

158159);



IF INSERTING THEN

&nbsp;

if :new.ctsc not in(17688) then

if (:new.cant&gt;ca) then
begin



raise eroare;



end;

end if;

end if;

&nbsp;
&nbsp;
&nbsp;
&nbsp;

ELSIF UPDATING THEN

&nbsp;

if :new.ctsc not in(17688) then

if (:new.cant&gt;ca) then
begin


raise eroare;


end;

end if;

end if;

&nbsp;

END IF;

EXCEPTION

WHEN eroare THEN msg('Cantitatea produsului '||:new.ctsc||' depaseste resturile la depozitul '||:new.ctdep||' de: '||ca);



end;
/

 
???

Post #: 3
RE: Сообщение для тригера в PL/SQL - 2008-11-15 15:25:58.726666   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
Не знаю как у других, но в моем браузере фрагмент кода выгладел нечитабельно, поэтому боее отфроматированный вариант (из которого лищние условия были выброшены):
CREATE OR REPLACE TRIGGER UN4.TRiG_Ver_Cant instead OF INSERT OR updаtе ON UN4.VMDB_CMN202D FOR EACH ROW DECLARE CA NUMBER; eroare EXCEPTION; BEGIN ca:=Un$sold.CALC_SOLD(sysdate, 2161, ' ', :new.ctsc, :new.ctdep, ' ', ' ', ' ', ' ', ' ', 158159); IF INSERTING or UPDATING THEN if (:new.ctsc not in(17688)) AND (:new.cant&gt;ca) then raise eroare; end if; END IF; EXCEPTION WHEN eroare THEN msg('Cantitatea produsului '||:new.ctsc||' depaseste resturile la depozitul '||:new.ctdep||' de: '||ca); end;
М.б проблема в null, по любому нужен отладчик запроса, запусти и разберись.
Я в оракле никак, но может триггер вызывается перез свтавкой обновлениям, а не после,
в результате значения :new.ctsc и :new.ctdep не определены.
Или может они не конвертируемы в строковое представление.

По идее должно быть так (в теме ты это и указал):
1. в исключении создается и посылается сообщение.
2. в твоем приложении на С++ Билдер срабатывает событие - пришло новое сообщение
3. от туда ты вызвваешь MSGBOX (у него параметрах задаешь что нужно спросиь и как ответят: Ok+Отмена || Да+Нет …)
4. Принимаешь ответ от пользователя
5. Отправляешь ответ базе
6. код заданный в исключении продолжает работу (он принял твое сообщение и обработал его)

Подготовить сообщение это - PACK_MESSAGE
Послать сообщение - SEND_MESSAGE
Получить ответ - RECIVE_MESSAGE
Получить тип ответа - NEXT_ITEM_TYPE
Получиь значение ответа - UNPACK_MESSAGE

Я никогда не огранизовывал общение между БД и Приложением кроме как запросами - выборка/вставка, но думаю эти сообщения именно для таких случаев и нужны.
Post #: 4
Страниц:  [1]
Все форумы >> [Прочее] >> Сообщение для тригера в PL/SQL







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.