Toon posts:

postgresql trigger probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben op school bezig met postgresql. Nu moet ik een trigger maken, maar ik heb geen verstand van triggers.

Het is de bedoeling dat als er in de tabel 'tbl_bestelregel' een nieuwe regel toevoegd wordt, het totaalprijs van alle bestelregels ingevult wordt in het veld 'totaaalbestelregel' die in dezelfde tabel staat.

Er wordt dus een bestelling aangemaakt, bestaande uit bestelregels die in de tabel 'tbl_bestelregel' staan. Alle prijzen staan echter in twee andere tabellen namelijk 'tbl_pizza' met het veld 'prijs' en 'tbl_category' met het veld 'prijs'. De totaalprijs wordt in de tabel 'tbl_bestelregel' gezet. Elke bestelregel heeft zijn eigen totaalprijs.

Kan iemand mij helpen???

Ik heb al wel kunnen vinden hoe ik een trigger aanmaak met CREATE TRIGGER en CREATE FUNCTION. Kan echter niet bedenken wat er in de CREATE FUNTION segment moet staan.

alvast bedankt

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Kan je iets beter illustreren hoe je tabellen eruit zien?

Bijvoorbeeld door hun structuur vereenvoudigd hier weer te geven.
Kijk verder hier es naar:
de manual over procedurele talen
en dan met name naar:
het deel over triggers

Het idee achter een trigger is dat het uitgevoerd wordt voor of na een statement. En dat je dus daarmee allerlei code kan uitvoeren.

Het is vaak simpeler dan je denkt, je kan bijvoorbeeld eerst in sql-statements en gewone "code" (php ofzo) uitschrijven wat er precies gedaan moet worden.

Bijvoorbeeld zoiets:
select sum(pizza.prijs) into pizza_totaal from pizza
select sum(category.prijs) into cat_totaal from category

en dan later
update tabel set totaalbedrag = pizza_totaal + cat_totaal

Verwijderd

Topicstarter
de tabellen zien er zo uit:

tbl_bestelling(bestel_id, klant_ref, filiaal_ref)
tbl_bestelregel(bestel_id, bestel_ref, pizza_ref, ingredienten_ref, totaalbestelregel)
tbl_pizza(pizza_id, naam, ingredienten_ref, prijs)
tbl_ingredienten(ingredienten_id, naam, category_ref)
tbl_category(category_id, naam, prijs)

Dit zijn alle tabellen die met het bestellen te maken hebben.

Ik ben met SQL wel bekend.

Ik kan echter niet eerder dan maandag er mee verder, ben dan weer op school. Was bezig met alvast een code te bedenken.

Verwijderd

Topicstarter
In het veld 'totaalbestelregel' in de tabel tbl_bestelregel moet het totaalbedrag komen te staan

Verwijderd

Topicstarter
heb nu het hieronderstaande, weet wel dat dit nog niet gaat werken.
Kan iemand me verder helpen??


CREATE OR REPLACE FUNCTION totaalprijs_bestelregel () RETURN TRIGGER AS ‘
BEGIN
SELECT tbl_pizza.prijs
WHERE NEW.pizza_ref = tbl_pizza.pizza_id;

SELECT tbl_category.prijs
WHERE NEW.bestelregel_id = tbl_kpl_bestrgl_ingr.bestelregel_id
AND tbl_kpl_bestrgl_ingr.ingredienten_ref = tbl_ingredienten.ingredienten_id
AND tbl_ingredienten.category_ref = tbl_category.category_id;

UPDATE TABEL SET totaalbestelregelprijs = totaal_pizza + totaal_category;
END;
‘ LANGUAGE ‘plpgsql’;

CREATE TRIGGER totaalprijs_bestelregel AFTER INSERT
ON tbl_bestelregel FOR EACH ROW
EXECUTE PROCEDURE totaalprijs_bestelregel ();

Verwijderd

Topicstarter
Dan nog een vraag

Misschien een hele stome vraag, maar hoe krijg ik een tigger aan het werk in een postgresql database?

Moet ik de trigger code gewoon in php zetten of kan ik de trigger ook in de database zetten met pgadmin????

  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
Ga je nu voor elke zin een nieuwe post doen? 80% van je posts staan in een tread, dus misschien kun je naast het lezen van wat boeken ook even de faq doornemen.

Voor de rest kunnen de volgende links wel nuttig zijn:

http://www.postgresql.org...idoc=1&file=triggers.html
http://www.postgresql.org...le=sql-createtrigger.html
http://www.postgresql.org...file=trigger-manager.html
http://www.postgresql.org...file=plpgsql-trigger.html


Welcome op GoT.

Everyone complains of his memory, no one of his judgement.


Verwijderd

Topicstarter
oke weet nu hoe ik een trigger aan de praat krijg.

moet alleen nog stoeien met de code, kom daar wel uit.

bedankt
Pagina: 1