Liebe Leut’,
ich hänge fest bei dem folgenden Versuch:
Gegeben zwei Tabellen mit einer optionalen 1-1-Beziehung, dazu ein View, der sie zusammenführt. Das soll ein updatable View werden, und die Regel für INSERT soll die RETURNING-Klausel unterstützen.
Also muss es eine INSTEAD-Regel ohne Bedingungen sein. Das heißt aber, dass innerhalb der Regel-Aktion geklärt werden muss, ob ein Satz für die zweite der beiden Tabellen nötig ist oder nicht (meistens ist er nicht nötig). Das wieder heißt, dass die Regel eine Funktion ausführen muss, in der diese Fallunterscheidung erfolgt. So weit alles schön und gut; die Regel lautet jetzt:
CREATE OR REPLACE RULE r_betrag_ins AS
ON INSERT TO v_ausgaben DO INSTEAD SELECT ausg_ins(new.*) AS ausg_ins;
Ein INSERT ohne RETURNING klappt mit dieser Regel, ein “INSERT … RETURNING ausg_id” führt zur Fehlermeldung:
FEHLER: INSERT RETURNING kann in Relation »v_ausgaben« nicht ausgeführt werden
HINT: Sie benötigen eine ON INSERT DO INSTEAD Regel ohne Bedingung, mit RETURNING-Klausel.
Jetzt die Frage: wie bekomme ich eine korrekte RETURNING-Klausel in meine Regel hinein? Einfach anhängen gibt einen Syntaxfehler. Das Beispiel in der Dokumentation hat SQL-Anweisungen in der Regel, keinen Funktionsaufruf.
Die Funktion gibt den neu vergebenen Primärschlüssel zurück, aber das allein scheint nicht der Punkt zu sein.
Mache ich was falsch (hoffentlich) oder geht das nicht, was ich möchte?