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

Czy mogę sprawić, by funkcja plpgsql zwróciła liczbę całkowitą bez użycia zmiennej?

Tak, możesz. Istnieje wiele sposobów.

1) RETURN (SELECT ...)

CREATE OR REPLACE FUNCTION get(_param_id integer)
  RETURNS integer AS
$func$
BEGIN
   RETURN (SELECT col1 FROM TABLE WHERE id = _param_id);
END
$func$  LANGUAGE plpgsql;

2) Użyj OUT lub INOUT parametr

CREATE OR REPLACE FUNCTION get(_param_id integer, OUT _col1 integer)
-- RETURNS integer -- "RETURNS integer" is optional noise in this case
  AS  
$func$
BEGIN
   SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;

   -- also valid, but discouraged:
   -- _col1 := col1 FROM TABLE WHERE id = _param_id;
END
$func$  LANGUAGE plpgsql;

Więcej w instrukcji tutaj.

3) (Ab)użyj IN parametr

Od Postgres 9.0 możesz również użyć parametrów wejściowych jako zmienne. Informacje o wersji 9.0:

Parametr wejściowy działa teraz jak zmienna lokalna zainicjowana do przekazanej wartości.

CREATE OR REPLACE FUNCTION get(_param_id integer)
  RETURNS integer AS
$func$
BEGIN
   SELECT INTO _param1  col1 FROM TABLE WHERE id = _param1;
   RETURN _param1;

   -- Also possible, but discouraged:
   -- $1 := col1 FROM TABLE WHERE id = $1;
   -- RETURN $1;
END
$func$  LANGUAGE plpgsql;

Z ostatnimi, których używasz zmienna niejawnie, ale nie musisz DECLARE to wyraźnie (zgodnie z żądaniem).

4) Użyj DEFAULT wartość z INOUT parametr

To trochę szczególny przypadek. Treść funkcji może być pusta.

CREATE OR REPLACE FUNCTION get(_param_id integer, INOUT _col1 integer = 123)
  RETURNS integer AS
$func$
BEGIN
   -- You can assign some (other) value to _col1:
   -- SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;
   -- If you don't, the DEFAULT 123 will be returned.
END
$func$  LANGUAGE plpgsql;

INOUT _col1 integer = 123 to krótka notacja dla INOUT _col1 integer DEFAULT 123 . Więcej:

  • Zapomniany operator przypisania „=” i zwykły „:="

5) Zamiast tego użyj zwykłej funkcji SQL

CREATE OR REPLACE FUNCTION get(_param_id integer)
  RETURNS integer AS
$func$
   SELECT col1 FROM TABLE WHERE id = _param_id;
   -- use positional reference $1 instead of param name in Postgres 9.1 or older
$func$  LANGUAGE sql;



  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 wyświetlić pełny kod procedury składowanej?

  2. Jak działa justify_interval() w PostgreSQL

  3. Włączanie obsługi PostgreSQL w PHP w systemie Mac OS X

  4. Jak zwrócić tylko czas pracy z rezerwacji w PostgreSql?

  5. Zmiana portu serwera kontenerów postgres w Docker Compose