Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Postgres trigger
Ogotay
post
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. (IMG:http://forum.php.pl/style_emoticons/default/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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif)

Ten post edytował Ogotay 29.12.2005, 15:34:34
Go to the top of the page
+Quote Post
SongoQ
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 08:24