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

Как да декларирам масив от rowtype във функция на PostgreSQL?

CREATE OR REPLACE FUNCTION for_example()
  RETURNS integer AS
$func$
DECLARE
   r "WEBHOST";
   b "WEBHOST"[];         -- this works
BEGIN
   FOR r IN 
      SELECT * FROM "WEBHOST"
   LOOP
      b := b || r;        -- this, too
   END LOOP;

   RAISE NOTICE '%', b;   -- get feedback
   RETURN 33;
END
$func$  LANGUAGE plpgsql; -- and lose the quotes

%rowtype като цяло не е необходимо. Обикновено свързаният тип ред на таблица е наличен като тип със същото име.

И не цитирайте името на езика.

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

Също така не е добра идея да използвате CaMeL-case идентификатори в Postgres. Използвайте законни идентификатори с малки букви, за да улесните живота си.

Най-доброто за последно :Това може да бъде много по-просто с агрегатната функция array_agg() :

CREATE OR REPLACE FUNCTION for_example()
  RETURNS integer AS
$func$
DECLARE
   b "WEBHOST"[];
BEGIN
   SELECT array_agg(tbl) INTO b FROM "WEBHOST" tbl;       

   RAISE NOTICE '%', b;
   RETURN 33;
END
$func$  LANGUAGE plpgsql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да задам парола за 'psql' неинтерактивно?

  2. Django, достъп до PostgreSQL последователност

  3. Как да върна множество редове от PL/pgSQL функция?

  4. Вмъкване на данни в колона PostgreSQL jsonb с Daper.Net и NPGSQL

  5. Как да агрегираме съвпадащи двойки в свързани компоненти в Python