Lorsque nous essayons de créer une vue dans une fonction, nous obtenons ERROR: il n'y a pas de paramètre $ 1. Ceci est l'exemple de code.
Begin
CREATE VIEW artikelnr AS
SELECT datum, 'uitgifte' as "type", CASE WHEN 'test'='test' THEN 0 END as "aantal ontvangen", aantal as "aantal uitgegeven"
FROM uitgifteregel
JOIN artikel ON artikel.artikelnr = new.artikelnr
JOIN uitgifte ON uitgifte.uitgiftenr = uitgifteregel.uitgiftenr
UNION
SELECT datum, 'ontvangst' as "type", aantal as "aantal ontvangen" , CASE WHEN 'test'='test' THEN 0 END as "aantal uitgegeven"
FROM ontvangstregel
JOIN artikel ON artikel.artikelnr = new.artikelnr
JOIN ontvangst ON ontvangst.ontvangstnr = ontvangstregel.ontvangstnr;
Return new;
end;
Quand on remplace new.artikelnr en ligne 7 avec la valeur 1, il fonctionne comme il se doit, mais la fonction doit travailler avec différents Artikelnr de.
exemple la ligne 7: JOIN artikel ON artikel.artikelnr = new.artikelnr
S'il vous plaît nous indiquer la bonne direction.
Réponse: Nous devons créer cette vue à des fins éducatives. J'ai téléchargé une image de la vue et la tablestructure de notre base de données:
http://img208.imageshack.us/img208/5655/tablesk.jpg
Notre premier but était de créer une vue pour une artikel. Nous y sommes parvenus avec le code suivant:
CREATE VIEW artikelmutatiestotaal AS
SELECT null as "datum",'totaal' as "type",sum(ontvangstregel.aantal)as "aantal ontvangen",sum(uitgifteregel.aantal) as "aantal uitgegeven"
FROM uitgifteregel, ontvangstregel
UNION
SELECT datum,'uitgifte' as "type", CASE WHEN 'test'='test' THEN 0 END as "aantal ontvangen", aantal as "aantal uitgegeven"
FROM uitgifteregel
JOIN artikel ON artikel.artikelnr = 1
JOIN uitgifte ON uitgifte.uitgiftenr = uitgifteregel.uitgiftenr
UNION
SELECT datum,'ontvangst' as "type", aantal as "aantal ontvangen" , CASE WHEN 'test'='test' THEN 0 END as "aantal uitgegeven"
FROM ontvangstregel
JOIN artikel ON artikel.artikelnr = 1
JOIN ontvangst ON ontvangst.ontvangstnr = ontvangstregel.ontvangstnr
La seule chose que nous ne pouvons pas atteindre est d'obtenir la valeur de Artikelnr de notre déclaration d'insertion.
CREATE FUNCTION addview() returns trigger as '
Begin
CREATE VIEW artikelnr AS
SELECT null as "datum",'totaal' as "type",sum(ontvangstregel.aantal)as "aantal ontvangen",sum(uitgifteregel.aantal) as "aantal uitgegeven"
FROM uitgifteregel, ontvangstregel
UNION
SELECT datum,'uitgifte' as "type", CASE WHEN 'test'='test' THEN 0 END as "aantal ontvangen", aantal as "aantal uitgegeven"
FROM uitgifteregel
JOIN artikel ON artikel.artikelnr = new.artikelnr
JOIN uitgifte ON uitgifte.uitgiftenr = uitgifteregel.uitgiftenr
UNION
SELECT datum,'ontvangst' as "type", aantal as "aantal ontvangen" , CASE WHEN 'test'='test' THEN 0 END as "aantal uitgegeven"
FROM ontvangstregel
JOIN artikel ON artikel.artikelnr = artikelnr
JOIN ontvangst ON ontvangst.ontvangstnr = ontvangstregel.ontvangstnr
end;
'language plpgsql;
Lorsque nous remplaçons JOIN artikel ON artikel.artikelnr = new.artikelnr
en ligne 7 avec
JOIN artikel ON artikel.artikelnr = 1
il fonctionne très bien. Désolé de poster ma question très déstructurée. Je ne sais pas très bien quelle information est importante pour répondre à cette question.
Voir les nouvelles modifications à ma réponse – zendar
Pourquoi voulez-vous créer plusieurs vues différentes portant le même nom? Ça ne va pas marcher. Et juste un artikelnr différent pour chaque vue? Quelle est ta cible? Quel est le problème sous-jacent que vous essayez de résoudre? –