gebi  Dołączył: 05 Maj 2006
Czy chodzi Ci o to, że w 9-tej linii usuwasz trigger, który nie istnieje?
Literówka:
--Drop Trigger wyzwalaz_ranga;
powinno być:
--Drop Trigger wyzwalacz_ranga;
 

Jarek Dabrowski  Dołączył: 20 Kwi 2006
Jasiek Matacz, najpierw może napisz, co te triggery mają robić.

--CREATE OR REPLACE TRIGGER wyzwalacz_ranga
--BEFORE DELETE ON ranga
--FOR EACH ROW
--BEGIN
--DELETE Ranga WHERE Ranga.id_rangi = Policjant.id_rangi;
--END;
--/

Co ma robić powyższy trigger? Bo kod jest bez sensu. Nie usuwasz rekordu z tabeli rangi w trigerze on delete na tej samej tabeli.

Podpowiem, że jeśli chciałbyś usunąć wszystkich policjantów, którzy mają rangę, która właśnie jest usuwana z tabeli rangi, to szło by tak:
BEGIN
DELETE Policjant WHERE id_rangi = :OLD.id_rangi
END;

:OLD to jest odnośnik do właśnie usuwanego rekordu z tabeli Ranga.

W triggerach update i insert masz jeszcze do dyspozycji :NEW
 

Jarek Dabrowski  Dołączył: 20 Kwi 2006
Jasiek Matacz napisał/a:
Szczerze? Wyzwalacz nie musi nic robić, mini-zaliczonko co mam oddać ma mieć:"10 tabel, 6 perspektyw (widoków), 4 kursorów oraz 3
wyzwalaczy. Tabele powinny być znormalizowane !!!. Każda tabela powinna być
wypełniona co najmniej 15 rekordami."
O, i to jest świetny sposób na przepełniającą się ludźmi Ziemię. Wystarczy wprowadzić podobny system na studiach medycznych.

Trigger, który nic nie robi będzie wyglądał tak:
CREATE OR REPLACE TRIGGER wyzwalacz_ranga
BEFORE DELETE ON ranga
FOR EACH ROW
BEGIN
NULL;
END;
/

Trigger, który coś robi masz w moim poprzednim poście.
 

gebi  Dołączył: 05 Maj 2006
Jarek Dabrowski napisał/a:
BEGIN
DELETE Policjant WHERE id_rangi = :OLD.id_rangi
END;

Dostałeś ostatnio jakiś mandat? :->
 

Jarek Dabrowski  Dołączył: 20 Kwi 2006
gebi napisał/a:
Dostałeś ostatnio jakiś mandat?
Poselski sie liczy?
 

romeoad  Dołączył: 02 Lis 2009
Jarek Dabrowski napisał/a:
DELETE Policjant WHERE id_rangi = :OLD.id_rangi


A przypadkiem nie tak?
DELETE FROM policjant WHERE id_rangi = :OLD.id_rangi
 

Jarek Dabrowski  Dołączył: 20 Kwi 2006
romeoad napisał/a:
FROM
Ja nie używam przy delecie. Mniej pisania. Pewnie jest opcjonalne, nie sprawdzałem.
 

romeoad  Dołączył: 02 Lis 2009
W/g SQL-92 nie jest opcjonalne i w większości baz tak to działa. No ale skoro dla Oracle'a nie ma różnicy '' (pusty string) czy null, to już mnie nawet opcjonalność FROM nie zdziwi.
 

Jarek Dabrowski  Dołączył: 20 Kwi 2006
romeoad napisał/a:
No ale skoro dla Oracle'a nie ma różnicy '' (pusty string) czy null
I bardzo dobrze, że tak jest. W MSSQLu pusty string to nie NULL i bardzo mi się to nie podoba. A to, że coś + NULL daje NULL, zamiast coś, jeszcze do dziś powoduje u mnie przyspieszone bicie serca. A to, że funkcja "length" obrzyna końcowe spacje przed liczeniem długości stringa, to się nadaje do kryminału.

A Oracle fajny jest, intuicyjny, taki samograj.
 

romeoad  Dołączył: 02 Lis 2009
Mi się z kolei nie podoba, że do kolumny number mogę wbić '' i uzyskuję null, co jest kompletnie nieintuicyjne - to jak robienie zdjęć na zielonym programie: wyrocznia sama wie co mógłbym chcieć osiągnąć ;-)
 

Cypis aka Piotr  Dołączył: 16 Cze 2008
romeoad napisał/a:
No ale skoro dla Oracle'a nie ma różnicy '' (pusty string) czy null, to już mnie nawet opcjonalność FROM nie zdziwi.

Hola hola - jak to nie ma różnicy?
Spróbuj sobie porównać WHERE zmienna = ''
versus
WHERE zmienna IS NULL
i zauważysz różnicę ];->
Doprowadza to do nadużywania NVL, ale działa konsekwentnie i logicznie... znaczy jak już się człowiek przyzwyczai ;-) .
 

bEEf  Dołączył: 28 Gru 2006
No ale czasem chcesz mieć pusty string i co wtedy? Jakaś kiepa to jest :-P
 

Cypis aka Piotr  Dołączył: 16 Cze 2008
E, to zawsze możesz sobie białych znaków nawciskać :-)
 

gebi  Dołączył: 05 Maj 2006
bEEf, a jaki pożytek z "pustych stringów" ;-) Pełne to jest to!
 

Jarek Dabrowski  Dołączył: 20 Kwi 2006
gebi napisał/a:
bEEf, a jaki pożytek z "pustych stringów" ;-) Pełne to jest to!
Oracle takie bojące jest - zawsze ma pełno w stringach.
 

bEEf  Dołączył: 28 Gru 2006
Kiedyś szef rozeźlony, że mu coś tam nie działa, a mu programiści zaczęli się tłumaczyć, że "stringi cośtam cośtam" krzyczał "w dupie mam te stringi, w dupie mam" :mrgreen:
 

romeoad  Dołączył: 02 Lis 2009
Cypis aka Piotr napisał/a:
Spróbuj sobie porównać WHERE zmienna = ''

Bardzo chętnie, ale nie umiem wstawić '' do kolumny tak, żeby to się automagicznie nie zmieniło na null.
Cypis aka Piotr napisał/a:
jak już się człowiek przyzwyczai

No właśnie ;-) Gorzej że to prowadzi do zapluskwienia oprogramowania w wyższych warstwach i nagle nie wiadomo dlaczego coś się sypie.
 

krzpob  Dołączył: 17 Lis 2009
postgres wymaga przy delete from
 

Aspius  Dołączył: 18 Wrz 2006
możesz walnąć funkcję, która zwróci ci sumę punków karnych dla zatrzymanego ;)
 

Aspius  Dołączył: 18 Wrz 2006
generalnie to dość proste jest. niestety piszę całkiem z głowy w notatniku więc możliwe są jakieś błędy ale to na pewno nam ktoś zaraz poprawi ;)
jakoś tak by to szło :

CREATE OR REPLACE FUNCTION ilosc_pkt(p_id_zatrzymanego number) return number
IS
CURSOR c_ilosc_pkt (pc_id_zatrzymanego number) IS
SELECT sum(punktów_karnych)
FROM mandaty
WHERE id_zatrzymanego=pc_id_zatrzymanego;

V_pkt_karne number;

BEGIN
Open c_ilosc_pkt (p_id_zatrzymanego);
Fetch c_ilosc_pkt into v_pkt_karne;
Close c_ilosc_pkt;

Return v_pkt_karne;

END;

to oczywiście w maksymalnym uproszczeniu, wywołujesz to z parametrem id zatrzymanego i powinien pokazać ci sumę jego punktów karnych. Jako że nie masz tam dat, trudno oceniać czy to aktualne punkty czy nie... ale to już bardziej merytoryczne dyskusje niż techniczne ;)

Wyświetl posty z ostatnich:
Skocz do:
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach