[noob] Kontrollstrukturen

Hallo!

Ich würde gerne in einer Funktion auf Basis eines boolschen Wertes entscheiden, ob etwas getan werden soll, aber ich habe noch keine Ahnung davon, wie sowas gehen soll.

Mein Ansatz:

IF get_bool_value() THEN
SELECT 666;
ELSE
SELECT 42;
END IF;

Aber: das gibt einen Fehler: “syntax-error near IF…”.

Wo liegt mein Fehler (nebst fehlendem Wissen versteht sich :slight_smile: ).

Grüße, pktm

SQL kennt kein IF… THEN … END. Du kannst statt dessen CASE verwenden, für komplexere Dinge plpgsql.

test=# select case when 1=1 then 'ja' else 'nein' end as antwort;
 antwort
---------
 ja
(1 Zeile)

Zeit: 62,973 ms
test=*# select case when 1!=1 then 'ja' else 'nein' end as antwort;
 antwort
---------
 nein
(1 Zeile)

Zeit: 0,382 ms
test=*#

Andreas

Oh ja, da hab ich bneim editieren doch glatt das pgSQL vor der Funktion vergessen.
Also, die Funktion ist eine plpgsql-Funktion, aber ich erhalte dennoch diesen Fehler.

Grüße, pktm

Nun, nach dem ermüdenden Spiel der Griechen habsch keine große Lust mehr, Gedanken zu erraten. Oder Code. Oder so. Möglicherweise steckt der Fehler genau dort, was Du uns nicht zeigst.

test=# create or replace function get_bool() returns bool as $$begin return true::bool; end; $$language plpgsql;
CREATE FUNCTION
Zeit: 0,352 ms
test=*# create or replace function my_foo() returns int as $$begin if get_bool() then return 10; else return 20; end if; end;$$language plpgsql;
CREATE FUNCTION
Zeit: 0,524 ms
test=*# select * from my_foo();
 my_foo
--------
     10
(1 Zeile)

Andreas