Probleme mit Implementierung

Da ich noch neu mit PL/pqsql wollte ich ein Beispiel aus einem Tutorial ausprobieren, allerdings kriege ich es nicht zum laufen.

CREATE OR REPLACE FUNCTION mwst_voll(real) RETURNS real AS '
DECLARE
betrag ALIAS FOR $1;
steuer REAL := 1.16;
BEGIN
return betrag * steuer;
END;
' LANGUAGE SQL;

Wenn ich diesen Code unter pgAdmin ausführe kommt folgende Fehlermeldung:
ERROR: syntax error at or near “ALIAS”
SQL Status:42601
Zeichen:79

Wenn ich das ganze in eine Datei schreibe und versuche über die Konsole mit dem Befehl \i zu importieren kommt die gleiche Fehlemeldung.

Tausche mal das ’ um der Funktion gegen $$ und SQL gegen plpgSQL.

Andreas

Suer jetzt funktioniert es :slight_smile:

Also es hat gereicht SQL durch plpgSQL zu ersetzen, dass ersetzen vom ’ erzeugt einen anderen Fehler.

Welchen?

Ansonsten, ja, ’ geht in dem Fall auch, aber falls in der Funktion Du mit Stringkonstanten (z.B.) arbeiten mußt, ist das Dollarquoting ab 8.? deutlich angenehmer. Deswegen sagte ich das. Möglicherweise hast Du ja noch eine ältere Version am Start.

Btw.: Du kannst die Funktion als IMMUTABLE und STRICT markieren.

Andreas

Gibt es die Möglichkeit innerhalb der Funktion eine Abfrage in der Datenbank zu machen und diesen Wert an eine Variable zu übergeben? Als Resultat der Abfrage gibt es nur einen Wert und ich bräuchte es für weitere Berechnungen.

Ja. SELECT into variable FOO from …


Andreas

So jetzt nur noch eine kleine Frage :slight_smile:

Kann man bei einem Return mehrere Werte zurückgeben? Also zwei Columns?

Ja.

test=*# create or replace function zwei_werte(OUT foo int, OUT bar float) returns record as $$begin foo:=1;bar:=3.14;end;$$language plpgsql;
CREATE FUNCTION
test=*# select * from zwei_werte();
 foo | bar
-----+------
   1 | 3.14
(1 row)

Andreas

Vorsicht, beim Copy&Paste ist das doppelte Dollarzeichen durch ein einfaches ersetzt worden…

Andreas