PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zwróć zestaw rekordów (wirtualną tabelę) z funkcji

(Wszystko to zostało przetestowane z postgresql 8.3.7 — czy masz wcześniejszą wersję? Wystarczy spojrzeć na użycie „ALIASU ZA 1 USD”)

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
$$;

Jeśli masz zmienną rekordu lub wiersza do zwrócenia (zamiast wyniku zapytania), użyj „ZWRÓĆ DALEJ” zamiast „ZWRÓĆ ZAPYTANIE”.

Aby wywołać funkcję, musisz zrobić coś takiego:

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

Musisz więc zdefiniować, czego oczekujesz od wyjściowego schematu wiersza funkcji w zapytaniu. Aby tego uniknąć, możesz określić zmienne wyjściowe w definicji funkcji:

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
$$;

(nie jestem pewien, dlaczego wymagane są dodatkowe rzuty ::text... '1' to może domyślnie 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. Wstawianie ciągu tekstowego z szesnastką do PostgreSQL jako bajt

  2. mysql_insert_id alternatywa dla postgresql

  3. PostgreSQL - Dodaj klucz do każdego obiektu tablicy JSONB

  4. Tworzenie zimnej gotowości dla PostgreSQL przy użyciu Amazon AWS

  5. Tablica PHP do tablicy postgres