PostgreSQL-Funktion mit wählen Sie einen Wert zurückgeben
Ich habe eine Tabelle years
(1. Januar jedes Ohr). Ich möchte eine Funktion erstellen, die nimmt jedes dieser Jahre und führt eine Abfrage in einer anderen Tabelle, die Anzahl der Zeilen, dass die Zugehörigkeit zu diesem Jahr. Ich habe versucht, die Umsetzung mit pl/pgsql, mit dem code unten, aber ich bekomme es nicht arbeiten oder finden jede Bezugnahme auf das Internet.
CREATE or REPLACE FUNCTION func_test(in AAA date, OUT _result int)
BEGIN
SELECT SUM(st_length(geom)) as BBB
FROM hist_line
WHERE '2006-01-01' BETWEEN valid_from AND COALESCE(valid_to, '9999-12-31');
RETURN _result BBB;
END;
$$ LANGUAGE plpgsql;
CREATE or REPLACE FUNCTION func_test(date)
select func_test('2009-01-01');
Ich bin nicht in der Lage sich zu erholen, den Inhalt der Abfrage in der Funktion als die Ausgabe der Funktion.
- Also, tun Sie verwenden Oracle oder Postgresql?
- Guneli: ich verwende Postgresql
- Eine solche Frage muss Tabellendefinitionen (was man mit
\d tbl
in psql) und die version von Postgres.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code hat mehr als ein Problem, sondern hauptsächlich Fehler ist Unrecht mit dem SELECT-Anweisung - was tun Sie, hat nicht den Sinn. Embedded-SQL in plpgsql hat eine spezielle Klausel "IN targetvar":
Diese one-line-Funktionen nicht implementiert werden plpgsql. Nur SQL verwenden.
Gute Quelle über PL/pgSQL ist im Zusammenhang Kapitel in der PostgreSQL-Dokumentation. Zweite Quelle kann meine tutorial.
Als @Pavel beantwortet, der code in der Frage nicht machen eine ganze Menge Sinn.
So oder so, nach deiner Beschreibung, Sie nicht eine Funktion benötigen, die auf allen.
"Die Zugehörigkeit zu einem Jahr" zu bedeuten scheint überlappenden Zeitraum. Verwenden Sie eine einfache Abfrage mit einer
JOIN
, ein smart join-Bedingung und-aggregation.Vorausgesetzt diese Tabelle (fehlt in der Frage):
Diese Abfrage würde die Aufgabe:
Details für die
ÜBERSCHNEIDUNGEN
Betreiber:Finden überschneidende Zeiträume in PostgreSQL
Das Handbuch über
'infinity'
.