PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uzyskaj wynik z zapytania w funkcji DO

nie możesz zwracać wartości z DO oświadczenie. Zamiast tego utwórz funkcję plpgsql.

Istnieje kilka sposobów zdefiniowania typu zwracanego za pomocą RETURNING klauzula lub z OUT parametry. Przeczytaj instrukcję o CREATE FUNCTION .

Istnieje kilka sposobów na zwrócenie wartości z funkcji. Przeczytaj rozdział Powrót z funkcji w instrukcji.

W szczególności, ponieważ próbujesz zwrócić całe wiersze z tabeli, możesz użyć zarejestrowanego typu tabeli do deklaracji funkcji:

CREATE FUNCTION foo ()
  RETURNING SETOF test_log 
$func$
BEGIN

IF 'a' = 'a' THEN
  RETURN QUERY
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$func$ LANGUAGE plpgsql;

Zadzwoń:

SELECT * FROM foo ();

Lub spróbuj poszukać tutaj na SO. Zamieściłem wiele powiązane przykłady kodu .

Obejście dla DO oświadczenie

Jeśli nie możesz użyć funkcji, jedynym połowicznym sensownym obejściem instrukcji DO jest użycie tabeli tymczasowej:

CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;

$do$
BEGIN

IF 'a' = 'a' THEN
  INSERT INTO tbl_tmp
  SELECT * FROM test_log LIMIT 10;
ELSE
   RAISE WARNING $$Didn't work!$$;
END IF;

END
$do$ LANGUAGE plpgsql;

SELECT * FROM tbl_tmp;

Tymczasowe tabele są automatycznie usuwane na koniec sesji .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przetestować wpis w crontab?

  2. Czy WIDOKI PostgreSQL są tworzone od nowa za każdym razem, gdy są odpytywane?

  3. libpq Postgresql z Qt w systemie Windows

  4. Błąd składni w kodzie testowym UPSERT

  5. Jak wdrożyć system LMS kanwy o wysokiej dostępności za pomocą klastra bazy danych PostgreSQL