Soru Bir plpgsql işlevi bir değişken kullanmadan bir tam sayı döndürür mü yapabilirim?


Böyle bir şey:

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

Kaçınmak istiyorum DECLARE sadece bunun için.


25
2017-11-17 15:24


Menşei




Cevaplar:


Evet yapabilirsin. Bir dizi yol var.

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) kullanın OUT veya INOUT parametre

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;

Kılavuzda daha fazla.

3) (Ab) kullanımı IN parametre

Dan beri Postgres 9.0 Ayrıca kullanabilirsiniz giriş parametreleri değişken olarak 9.0 için sürüm notları:

Bir girdi parametresi, artık giriş değerine başlatılan yerel bir değişken gibi davranır.

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;

Son olanlar ile kullan bir değişken örtülü olarak, ancak zorunda değilsiniz DECLARE Açıkça (istendiği gibi).

4) kullanın DEFAULT ile bir değer INOUT parametre

Bu biraz özel bir durum.

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 kısa gösterim INOUT _col1 integer DEFAULT 123. Detaylar:

5) Düz kullanın SQL işlevi yerine

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;

52
2017-11-17 15:39





CREATE or REPLACE FUNCTION get(i integer)
RETURNS integer as $id$
DECLARE
id integer;
BEGIN
SELECT column_id INTO id FROM table_name WHERE column_id=i;
RETURN id;
END;
$id$ LANGUAGE plpgsql;

1
2017-10-11 14:34



Nerede "olmadan değişken kısım