1

Temat: Procedura składowana

Witam

Nie wiem czy w PostgreSQL jest możliwe zrobienie takiej procedury jak np. w Oraclu,
która zwróci mi kilka pól typu Cursor (tak dla porównania z oraclem).

Więc stworzyłem sobie kilka własnych typów danych:

CREATE TYPE a1 AS
   (
    ...............
};
CREATE TYPE a2 AS
   (
    ...............
};

Każda z powyższych typów ma własną procedurke ,która pobiera dane dla tych typów.

CREATE OR REPLACE FUNCTION "a1Proc"()
  RETURNS SETOF a1  AS ...............

CREATE OR REPLACE FUNCTION "a2Proc"()
  RETURNS SETOF a2  AS ...............

Teraz zaczyna się sedno problemu.
Stworzyłem sobie typ ,które ma zawierać listę (tablice powyższych typów).
Tak bym mógł za pomocą jednej procedury pobrać to co pobierają a1Proc i a2Proc.

CREATE TYPE a1a2 AS
   (
    _a1 a1[],
    _a2 a2[]
};

Teraz sama procedura , przy kompilacji jej nie ma błędów.


CREATE OR REPLACE FUNCTION sysbuk."a1a2 Proc"()
  RETURNS SETOF a1a2  AS
$BODY$
    DECLARE
        wynik a1a2;    
    BEGIN
                // wydaje mi sie ze te przypisanie jest ok
                SELECT ARRAY(SELECT * FROM "a1Proc"())INTO wynik._a1; 
                SELECT ARRAY(SELECT * FROM "a2Proc"())INTO wynik._a2;
                RETURN NEXT wynik;
    END
$BODY$

Dopiera przy jej wywoływaniu występuje błąd.

ERROR:  subquery must return only one column

Dla przykładu w Oraclu jest możliwość deklaracji zmiennych wyjściowych i wejściowych.
np.
_a1 OUT CURSOR,
_a2 OUT CURSOR,

Jednak w Postgresie chyba nie ma takiego mechanizmu dlatego wydaje mi się ,że jestem skazany na stworzenie
dodatkowego typu a1a2.