sql >> Databáze >  >> RDS >> PostgreSQL

Mohu zajistit, aby funkce plpgsql vrátila celé číslo bez použití proměnné?

Ano můžeš. Existuje několik způsobů.

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) Použijte OUT nebo 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;

Více v návodu zde.

3) (Ab)použijte IN parametr

Od Postgres 9.0 můžete také použít vstupní parametry jako proměnné. Poznámky k vydání pro 9.0:

Vstupní parametr nyní funguje jako lokální proměnná inicializovaná na předávanou hodnotu.

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;

S těmi posledními, které používáte proměnnou implicitně, ale nemusíte DECLARE to explicitně (jak je požadováno).

4) Použijte DEFAULT hodnotu s INOUT parametr

Tohle je trochu speciální případ. Tělo funkce může být prázdné.

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 je krátký zápis pro INOUT _col1 integer DEFAULT 123 . Více:

  • Zapomenutý operátor přiřazení "=" a obyčejný ":="

5) Místo toho použijte obyčejnou funkci 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. Co potřebuji ke spuštění SQL?

  2. Opravte problém se zamítnutím přístupu k obnovení SQL databáze

  3. Příklad Oracle UTL_HTTP Post Multipart/Form-Data (JSON &ZIP).

  4. Nejlepší přístupy pro seskupené průběžné součty