Выбор функций PostgreSQL * - PullRequest
       7

Выбор функций PostgreSQL *

1 голос
/ 12 апреля 2009

Как я могу использовать select * from some_table в функции в postgres?

Ответы [ 2 ]

5 голосов
/ 12 апреля 2009
CREATE OR REPLACE FUNCTION  my_function() RETURNS INTEGER AS '
   DECLARE
      your_record your_table%ROWTYPE;
   BEGIN

      FOR your_record IN SELECT * FROM your_table  
      LOOP

      --
      -- You can access fields of your table using .
      --    your_record.your_field
        ...
      END LOOP;


   END;
' LANGUAGE 'plpgsql'
STABLE;

или

CREATE OR REPLACE FUNCTION  my_function() RETURNS INTEGER AS '
   DECLARE
      your_record your_table%ROWTYPE;
   BEGIN

      SELECT * INTO your_record FROM your_table;

      --
      -- You can access fields of your table using .
      --    your_record.your_field

   END;
' LANGUAGE 'plpgsql'
STABLE;


EDIT:

С присоединением, возвращающим запись:

CREATE OR REPLACE FUNCTION  my_function() RETURNS SETOF record AS '
   DECLARE
      your_record record;
   BEGIN
      --
      -- You should specify a list of fields instead of *
      --
      FOR your_record IN SELECT * FROM your_table INNER JOIN ...           
         RETURN NEXT your_record;
      END LOOP;
   END;
' LANGUAGE 'plpgsql'
STABLE;

Чтобы использовать my_function (), вы должны указать поля и типы данных: Подробнее здесь

2 голосов
/ 23 мая 2012

Существует метод smipler, если вы хотите использовать SQL в функции, используйте язык SQL в функции:

CREATE FUNCTION getallzipcodes() 
RETURNS SETOF zip AS
$BODY$
     SELECT * FROM zip;
$BODY$ 
LANGUAGE 'sql';

И это тоже может быть полезно (как вызывать функцию)

SELECT function_returning_setof(); -- Wrong!  
SELECT * FROM function_returning_setof(); -- OK!  
SELECT function_returning_scalar(); -- OK 

ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...