1

Temat: SELECT CASE UPDATE/INSERT

Witam

Próbuje stworzyć zapytanie które pod określonym warunkiem wywoła UPDATE lub INSERT

SELECT CASE
   WHEN (SELECT id FROM .........) IS NULL THEN
      (INSERT ...............)
   WHEN (SELECT id_book ................) IS NOT NULL THEN     
      (UPDATE ................')
END

Jednak bez powodzenia, wskazywany jest błąd w składni.
ERROR:  syntax error at or near nazwa_tabeli

Czy jest to wykonalne, bo kiedyś słyszałem ,że w PostgreSQL nie da się tego zrobić.
A jeśli się nie da to prosiłbym o podobny lub zbliżony sposób.

2

Odp: SELECT CASE UPDATE/INSERT

Nie wiem czy rozumiem ale chcesz w zależności od tego czy jakieś zapytanie zwraca wynik wykonać update lub insert?

3

Odp: SELECT CASE UPDATE/INSERT

tak
gdy bym chciał użyć funkcji zrobił bym konstrukcje IF ELSE, jednak najlepiej jak by to było w zapytaniu

4

Odp: SELECT CASE UPDATE/INSERT

No to bez funkcji się nie da ale .. wystarczy sobie utworzyć taką uniwersalną funkcję

create function execute(text) returns void as 
$$
begin 
execute $1;
end;
$$ 
language plpgsql; 

i uzyć jej w tym case

SELECT CASE
   WHEN (SELECT id FROM .........) IS NULL THEN
      execute('INSERT ...............')
   WHEN (SELECT id_book ................) IS NOT NULL THEN     
      execute('UPDATE ................')
END

Co lepsze argument tej funkcji może być dynamiczny, generowany w locie na podstawie zawartości.

5

Odp: SELECT CASE UPDATE/INSERT

dzięki