sql >> Database >  >> RDS >> PostgreSQL

Kan ik een plpgsql-functie een geheel getal laten retourneren zonder een variabele te gebruiken?

Ja dat kan. Er zijn een aantal manieren.

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) Gebruik een OUT of INOUT parameter

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;

Meer in de handleiding hier.

3) (Ab)gebruik IN parameter

Sinds Postgres 9.0 u kunt ook invoerparameters . gebruiken als variabelen. De release-opmerkingen voor 9.0:

Een invoerparameter werkt nu als een lokale variabele die is geïnitialiseerd op de doorgegeven waarde.

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;

Met de laatste die je gebruikt impliciet een variabele, maar u hoeft niet DECLARE het expliciet (zoals gevraagd).

4) Gebruik een DEFAULT waarde met een INOUT parameter

Dit is een beetje een speciaal geval. De hoofdtekst van de functie mag leeg zijn.

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 is een korte notatie voor INOUT _col1 integer DEFAULT 123 . Meer:

  • De vergeten toewijzingsoperator "=" en de alledaagse ":="

5) Gebruik in plaats daarvan een gewone SQL-functie

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. Converteer DateTime voor MySQL met C#

  2. Hoe tekst in kleine letters in SQL te veranderen

  3. Tool voor vertaling van Oracle PL/SQL naar Postgresql PL/pgSQL

  4. Multi-threading C#-toepassing met SQL Server-databaseaanroepen