Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Postgres trigger
Ogotay
post 29.12.2005, 14:21:39
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 29.12.2005

Ostrzeżenie: (0%)
-----


Witam Wszystkich:

Nie mam wielkiego doswiadczenia w pl/sql i mam klopot. sad.gif

mam tabele:

odp

id_odp
id_ocena
id_pyt
odp

ocena

id_ocena
id_ankieta

pyt

id_pyt
id_ankieta
pytanie
numer_w_ankiecie

chodzi o to by wstawiajac nowy wiersz do tabeli ocena wstwiec do tabeli odp tyle wierszy ile pytan jest w danej ankiecie a odpowiedzi ustawic na null

Ten post edytował Ogotay 29.12.2005, 14:22:22
Go to the top of the page
+Quote Post
SongoQ
post 29.12.2005, 14:39:35
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Tworzysz trigger i funkcje do triggera, nic prostrzego. Radze uzyc pl/pgsql'a. Jesli masz problem jak to zrobic to wszystko masz w manualu, jesli cos nei bedziesz wiedzial to pisz.


--------------------
Go to the top of the page
+Quote Post
Ogotay
post 29.12.2005, 14:47:03
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 29.12.2005

Ostrzeżenie: (0%)
-----


no wlasnie o to chodzi ze nie bardzo wiem jak sadsmiley02.gif

begin
INSERT INTO odp (id_ocena, id_pyt, odpowiedz)
VALUES (NEW.id_ocena, '?', null);
return NEW;
end;


Jak to zrobic w petli i jakie dac warunki, zeby zamiast "?" wstawic id odpowiednich pytan?
Go to the top of the page
+Quote Post
SongoQ
post 29.12.2005, 14:52:37
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Jakiej petli? Jeden rekord odpowiada jednemu rekordowi w innej tabeli, ze tego co zrozumialem.

W taki sposob jak masz zaprojektowana bazke nie zrobisz aby trigger wstawial pyt_id, bo poprostu go nie masz. Musisz zmienic schemat, aby np w ocenie bylo pytanie.


--------------------
Go to the top of the page
+Quote Post
Ogotay
post 29.12.2005, 15:06:12
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 29.12.2005

Ostrzeżenie: (0%)
-----


  1. declare
  2. zbiornik record;
  3. begin FOR zbiornik IN SELECT id_pytanie, nr_w_ankieta
  4. FROM pytanie p, ocena o, ankieta a
  5. WHERE o.id_ocena=NEW.id_ocena AND p.id_ankieta=o.id_ankieta AND o.id_ankieta=a.id_ankieta ORDER BY nr_w_ankieta LOOP
  6.  
  7. INSERT
  8. INTO odpowiedz (id_ocena, id_pytanie, odpowiedz, nr_w_ankieta)
  9. VALUES (NEW.id_ocena, zbiornik.id_pytanie, NULL, zbiornik.nr_w_ankieta);
  10.  
  11. END LOOP;
  12. RETURN NEW;
  13. end;


schemat musi zostac tak jak jest.
jedna ocena zawiera wiele odpowiedzi na pytania z jednej ankiety.

dziala rolleyes.gif

Ten post edytował Ogotay 29.12.2005, 15:34:34
Go to the top of the page
+Quote Post
SongoQ
post 29.12.2005, 15:33:42
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Zastosuj Cursor


--------------------
Go to the top of the page
+Quote Post
Ogotay
post 29.12.2005, 20:11:52
Post #7





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 29.12.2005

Ostrzeżenie: (0%)
-----


dziala lokalnie przez pgadmin III, przez phppgadmin juz nie mad.gif
zrobilem import bazy, wklejam fragment odpowiedzialny za tworzenia funkcji i triggera i wywala blad.
  1. CREATE FUNCTION funkcja_ocena_odp() RETURNS "trigger" AS $$declare
  2. zbiornik RECORD;
  3. begin FOR zbiornik IN SELECT id_pytanie, nr_w_ankieta
  4. FROM pytanie p, ocena o, ankieta a
  5. WHERE o.id_ocena=NEW.id_ocena AND p.id_ankieta=o.id_ankieta AND o.id_ankieta=a.id_ankieta ORDER BY nr_w_ankieta
  6. LOOP
  7. INSERT
  8. INTO odpowiedz (id_ocena, id_pytanie, odpowiedz, nr_w_ankieta)
  9. VALUES (NEW.id_ocena, zbiornik.id_pytanie, NULL, zbiornik.nr_w_ankieta);
  10. END LOOP;
  11. RETURN NEW;
  12. end;$$
  13. LANGUAGE plpgsql;
  14.  
  15.  
  16. ALTER FUNCTION public.funkcja_ocena_odp() OWNER TO postgres;


A cursor jak wykorzystac?

Ten post edytował Ogotay 29.12.2005, 22:18:35
Go to the top of the page
+Quote Post
SongoQ
post 30.12.2005, 08:07:13
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Moze zamiast $$declare ' lub '', bo w niektorych wersjacha inaczej nie wchodzi.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 18:14