PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Мога ли да накарам функция plpgsql да връща цяло число, без да използвам променлива?

Да, можеш. Има няколко начина.

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) Използвайте OUT или INOUT параметър

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;

Повече в ръководството тук.

3) (Зло)използвайте IN параметър

От Postgres 9.0 можете също да използвате входни параметри като променливи. Бележки към версията за 9.0:

Входният параметър вече действа като локална променлива, инициализирана спрямо предадената стойност.

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;

С последните, които използвате променлива имплицитно, но не е нужно да DECLARE изрично (както е поискано).

4) Използвайте DEFAULT стойност с INOUT параметър

Това е малко специален случай. Тялото на функцията може да е празно.

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 е кратка нотация за INOUT _col1 integer DEFAULT 123 . Още:

  • Забравеният оператор за присвояване "=" и обичайното ":="

5) Използвайте вместо това обикновена 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. Как Tan() работи в PostgreSQL

  2. Излезе книгата „PostgreSQL 9.0 High Performance“.

  3. PostgreSQL - Замяна на HTML обекти

  4. Как работи current_time в PostgreSQL

  5. Поръчайте varchar низ като число