Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Trigger - provádění kódu bylo dokončeno s varováním

Zdravim všechny,
s databázema jsem docela nováček a potřeboval bych pomoci s jedním triggerem. Mám databázi evidenci pacientů. Potřeboval bych aby se v entitě hospitalizace kde se ukládá datum od a datum do a PK je nějaký id hospitalizace, aby nemohl být pacient přiřazen na dvě hospitalizace ve stejné datum. id_pacient je jako FK u hospitalizace. Tohle jsem zkoušel ale hází Warning: provádění kódu bylo dokončeno s varováním.
Myslíte že by mi prosím někdo mohl pomoct.
Předem díky
tady je můj pokus:

CREATE TRIGGER HOSP_pacient
BEFORE
INSERT
ON Hospitalizace
FOR EACH ROW
BEGIN
if new.dat_od_hosp>old.dat_od_hosp and new.dat_do_hosp<old.dat_do_hosp and new.id_pacient = old.id_pacient
THEN raise_application_error('Pacient již je v tento datum hospitalizován'); END IF;
END;

Zmena predmetu, pôvodne: Trigger (los)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Zobraz si to varování: SHOW ERRORS TRIGGER HOSP_pacient Nicméně tvoje podmínka bude fungovat. Kont…
Wikan 14.01.2012 18:11
Wikan
2/8 PLS-00201: identifikátor 'NEW.DAT_OD_HOSP' musí být deklarován 2/1 PL/SQL: Statement ignored to…
Vrata333 14.01.2012 18:23
Vrata333
Takže Oracle - v tom prípade ti chýba dvojbodka pred new a old. nový
los 14.01.2012 18:34
los
To je chyba, ale problem je v logice toho triggeru: v INSERT triggeru tezko muze byt definovana hod… poslední
AZOR 15.01.2012 12:48
AZOR
To: los Je pravda že tam asi nic v tu dobu nebude takže nemám s čim porovnávat novej záznam, a prom…
Vrata333 14.01.2012 18:14
Vrata333
Moja odpoveď ti pomôže, iba ak sú tie časy hospitalizácie v rámci jedného dňa, čo asi nie je tvoj pr… nový
los 14.01.2012 18:35
los
jsem asi vážně lama ale vůbec to nechápu potřeboval bych to opravdu nějak hodně jednoduše jestli by… nový
Vrata333 14.01.2012 19:36
Vrata333
Keď to chceš opravdu jednoduše, tak si to ošetri na aplikačnej úrovni. nový
los 14.01.2012 21:19
los

To je chyba, ale problem je v logice toho triggeru:

v INSERT triggeru tezko muze byt definovana hodnota OLD, zadny takovy radek NENI DEFINOVAN pro tento trigger.

Protoze podle toho co uzivatel chce si musi uzivatel vyselectovat stejneho id_pacienta a na stejnem id_pacientovy i id_hospitace jako jiz existujiciho radku a na zaklade toho rozhodovat.

Zpusobu reseni je nekolik - od aplikacni logiky az po MERGE - kde to bude kontrolovat trigger UPDATE, protoze podle mne jeden ID_PACIENT muze mit pouze jeden hospitacni aktivni zaznam.

Dalsi moznosti je treba kompozitni trigger (oracle 11.2g+), kde se lze ptat updatovane tabulky za jistycb okolnosti.

Zpět do poradny Odpovědět na původní otázku Nahoru