【发布时间】:2010-04-07 14:31:08
【问题描述】:
当我们尝试在函数中创建视图时,我们得到错误:没有参数 $1。这是示例代码。
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;
当我们将第 7 行的 new.artikelnr 替换为值 1 时,它会正常工作,但该函数需要与不同的 artikelnr 一起使用。
示例第 7 行:JOIN artikel ON artikel.artikelnr = new.artikelnr
请为我们指明正确的方向。
回应:我们必须出于教育目的创建此视图。我上传了一张图片 我们数据库的视图和表结构:
http://img208.imageshack.us/img208/5655/tablesk.jpg
我们的第一个目标是创造 一篇文章的观点。我们通过以下代码实现了这一点:
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
唯一我们无法实现的是从我们的插入语句中获取 artikelnr 的值。
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;
当我们替换JOIN artikel ON artikel.artikelnr = new.artikelnr
在第 7 行与
JOIN artikel ON artikel.artikelnr = 1
它工作正常。很抱歉发布我的问题非常非结构化。我不太清楚哪些信息对于回答这个问题很重要。
【问题讨论】:
-
为什么要创建许多不同的同名视图?那是行不通的。每个视图只是一个不同的artikelnr?你的目标是什么?您试图解决的根本问题是什么?
标签: sql postgresql join views