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

Връщане на setof запис (виртуална таблица) от функцията

(Всичко това е тествано с postgresql 8.3.7 - имате ли по-ранна версия? просто гледам как използвате "Псевдоним за $1")

CREATE OR REPLACE FUNCTION storeopeninghours_tostring(numeric)
 RETURNS SETOF RECORD AS $$
DECLARE
 open_id ALIAS FOR $1;
 result RECORD;
BEGIN
 RETURN QUERY SELECT '1', '2', '3';
 RETURN QUERY SELECT '3', '4', '5';
 RETURN QUERY SELECT '3', '4', '5';
END
$$;

Ако имате запис или променлива на ред за връщане (вместо резултат от заявка), използвайте „RETURN NEXT“, а не „RETURN QUERY“.

За да извикате функцията, трябва да направите нещо като:

select * from storeopeninghours_tostring(1) f(a text, b text, c text);

Така че трябва да дефинирате какво очаквате схемата на изходния ред на функцията да бъде в заявката. За да избегнете това, можете да посочите изходни променливи в дефиницията на функцията:

CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
 RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
BEGIN
 RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
END
$$;

(не съм съвсем сигурен защо са необходими допълнителните ::текстови предавания... '1' е varchar по подразбиране може би?)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да не създавате разширения PostgreSQL 9.0 на RPM платформи

  2. Как да избягвате знака за въпросителен знак (?) с Spring JpaRepository

  3. Най-добри практики за репликация на PostgreSQL – част 2

  4. Как да създадете потребител с привилегии на суперпотребител в PostgreSQL

  5. Добавете знак плюс/минус към число в PostgreSQL