Funckja w Postgresie - zwracanie SELECT'a w formie tabeli

0

Witam,
męczę się z problemem zwracania wyników z funkcji w formie tabeli sql.. W sieci jest 'rzekomo' wiele przykładów, ale żaden u mnie nie chce zadziałać.. -.-

Ostatecznie poniższy kod zwraca mi wynik wszystkich kolumn w jednej tylko kolumnie.. (wynik w postaci stringa, gdzie poszczególne kolumny oddzielone są przecinkiem..) (a powinien każdą kolumnę osobno..)

CREATE OR REPLACE FUNCTION "schemat"."testtest" (clientID INTEGER) 
RETURNS TABLE (
   cgacID INTEGER
  ,col1 INTEGER[]
  ,col2 INTEGER[]
  ,col3 NUMERIC[]
  ) AS $func$

BEGIN

  RETURN QUERY
  SELECT cgac_pl."Col0", cgac_pl."Col1", cgac_pl."Col2", cgac_pl."Col3"
  FROM "schemat"."tab1" AS cgac_pl
  INNER JOIN "schemat"."tab2" AS cg 
  ON cg."col1" = cgac_pl."col1"
  WHERE clientID = ANY ("ClientID")
  AND CURRENT_TIMESTAMP BETWEEN "Col4" AND "Col5";

END
$func$
  LANGUAGE plpgsql VOLATILE;

Próbowałem również coś pokombinować z RETURN SETOF record i to nawet działało OK, ale gdy pobierałem wyniki wyłącznie z jednej tabeli.. (dając typ SETOF nazwa_tabeli), ale dla select'a który pobiera dane z kilku tabel to niestety już nie chciało odpalić.. (był jakiś błąd z kontekstem użycia dla typu record...)

Miał ktoś okazje zmierzyć się z podobnym 'problemem' ?

1

Jeśli zwraca ci jedą kolumnę, a funkcja jest napisana poprawnie, to znaczy że ... źle ją wywołujesz.
Jedną kolumnę zwróci ci gdy wykonasz tak:

SELECT testtest(1)

Ale jeśli wywolasz tak:

SELECT * FROM testtest(1)

to zwróci ci tabelę...

0

@Marcin.Miga - o ja .... Tego bym nie podejrzewał :D Ogólnie nie wiele miałem do czyniania z Postgres'em.. ale wszystkie funkcje co pisałem zawsze wywoływałem "pierwszą" metodą podaną przez Ciebie i myślałem, że inaczej nawet nie idzie ^^, dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1