Hallo,
ich habe folgendes Problem, aber zuerst zum Aufbau.
Mein Vorgänger hat eine View auf 3 Tabellen erstellt. Um die Daten über die View bearbeiten zu können, hat er Delete-, Insert- und Update-Regeln für die View hinterlegt, die entsprechend die 3 Tabellen bearbeiten.
Ich habe das Problem, dass die Update-Regel nicht funktioniert!
In der Update- und Insert-Regeln werden über Select eigene Funktionen je Tabelle aufgerufen, die dann entscheiden, ob es ein Update oder Insert ist.
Die Definitionen sehen folgend aus:
CREATE OR REPLACE RULE koerperwerte_view_update_rule AS
ON UPDATE TO koerperwerte_view DO INSTEAD SELECT fett_check_insert(new.kunden_id, new.messdatum, new.fmesswert, new.mandant_id) AS fett_check_insert, gewicht_check_insert(new.kunden_id, new.messdatum, new.gmesswert, new.mandant_id) AS gewicht_check_insert, blutdruck_check_insert(new.kunden_id, new.messdatum, new.bsystolisch, new.bdiastolisch, new.mandant_id) AS blutdruck_check_insert;
CREATE OR REPLACE FUNCTION fett_check_insert(fkundenid integer, fmessdatum date, fmesswert numeric, fmandant_id integer)
RETURNS boolean AS
$BODY$
DECLARE
lreturn boolean;
nSaetze integer;
BEGIN
lreturn = true;
if fmesswert >= 0 then
select count(*) into nSaetze
from koerperfett
where mandant_id = fmandant_id and kunden_id = fkundenid and messdatum = fmessdatum;
if nSaetze > 0 then
update koerperfett set messwert = fmesswert
where mandant_id = fmandant_id and kunden_id = fkundenid
and messdatum = fmessdatum;
else
insert into koerperfett (koerperfett_id, mandant_id, kunden_id, messdatum, messwert)
values (default, fmandant_id, fkundenid, fmessdatum, fmesswert);
end if;
end if;
RETURN lreturn;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Ich habe nur den Code einer Funktion aufgeführt, weil die anderen genauso aussehen und nur für anderen Tabellen erstellt sind.
Beim Ausführen des Update-Befehls bekomme ich folgenden Fehler, den ich in den Logs gefunden habe:
FEHLER: WHERE CURRENT OF mit einer Sicht ist nicht implementiert
ANWEISUNG: update KOERPERWERTE_VIEW set “kunden_id” = 1,“messdatum” =‘2013-02-21’::date,“gmesswert” =79.00,“mandant_id” = 1
Wenn ich im PGAdmin folgenden Befehl aufrufe, funktioniert es einwandfrei:
SELECT fett_check_insert(1, '2013-02-21'::date, 16.20, 1) AS fett_check_insert
Ich verstehe nicht, woran es ligt und wie ich den Fehler beseitigen kann!
Bitte um Hilfe!