當我們嘗試在函數內創建視圖時,我們得到錯誤:沒有參數$ 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;
當我們更換new.artikelnr與價值1它像它應該第7行,但功能需要與不同的artikelnr的工作。
例如7號線:JOIN artikel ON artikel.artikelnr = new.artikelnr
請爲我們指出了正確的方向。
迴應:我們必須創建此視圖用於教育目的。我已經上傳的 視圖的圖像和我們的數據庫的tablestructure:
http://img208.imageshack.us/img208/5655/tablesk.jpg
我們的第一個目標是創造 一個ARTIKEL視圖。我們用下面的代碼來實現這一點:
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的價值我們的INSERT語句。
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 = 1
取代JOIN artikel ON artikel.artikelnr = new.artikelnr
第7行,它工作正常。抱歉發佈我的問題非常結構化。我不知道哪些信息對於回答這個問題很重要。
查看我的回答的新編輯 – zendar 2010-04-08 09:00:05
爲什麼你想創建許多不同的意見,同名?這是行不通的。每個視圖只是一個不同的artikelnr?你的目標是什麼?你試圖解決的根本問題是什麼? – 2010-04-08 10:17:27