plpgsql Fehler "ZURÜCK WEITER haben, kann nicht einen parameter in der Funktion mit OUT-Parametern" in der Tabelle-Rückkehr-Funktion

Ich habe eine plpgsql-Funktion in PostgreSQL 9.2, die eine Tabelle zurückgibt. Die Funktion läuft mehrere Wählt, die Rückkehr in die gleichen Spalten wie die Funktion und dann entweder gibt die Ergebnisse oder eine Ausnahme auslöst, je nachdem auf einigen Prüfungen. Der einzige Weg, ich kann sehen, dies zu tun ist mit FOR ... LOOP, aber ich kann nicht herausfinden, eine bequeme Möglichkeit der Rücksendung der Reihe.

Möchte ich etwas wie das hier tun:

CREATE OR REPLACE FUNCTION my_function()
RETURNS TABLE(column1 integer, column2 boolean, ...)
AS $BODY$
DECLARE
    result_row RECORD;
BEGIN
    FOR result_row IN (SELECT * FROM other_function_returning_same_columns()) LOOP
        IF something_wrong_with(result_row) THEN
            RAISE EXCEPTION 'Something went wrong';
        END IF;

        RETURN NEXT result_row;
    END LOOP;
END
$BODY$ LANGUAGE plpgsql STABLE;

Dieser gibt mir eine Fehlermeldung:

FEHLER: ZURÜCK WEITER haben, kann nicht einen parameter in der Funktion mit OUT-Parametern

Ich bin mir nicht sicher, warum Postgres ist hier beschweren, weil mein code sieht viel wie das Beispiel in der Dokumentation, außer, dass meine Funktion liefert TABELLE anstelle von SETOF. Es gibt keine OUT-Parameter.

Ich es schließlich geschafft, es zu bekommen, um die Arbeit mit

RETURN QUERY SELECT result_row.column1, result_row.column2, ...;

aber mit um eine Liste der Spalten, die ganze Zeit ist hässlich und schwieriger zu pflegen. Ich bin sicher, es muss einen besseren Weg geben.

Tun Sie müssen eine Ausnahme geworfen, oder wollen Sie einfach nur qualifizierende Zeilen zurück?
Ja, ich will eine Ausnahme geworfen, in einigen Fällen.

InformationsquelleAutor EM0 | 2012-12-26

Schreibe einen Kommentar