<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Procedura składowana]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=625</link>
		<description><![CDATA[Najświeższe odpowiedzi w Procedura składowana.]]></description>
		<lastBuildDate>Sun, 21 Aug 2011 18:17:37 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Procedura składowana]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2640#p2640</link>
			<description><![CDATA[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:

[code]
CREATE TYPE a1 AS
   (
    ...............
};
CREATE TYPE a2 AS
   (
    ...............
};
[/code]

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

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

CREATE OR REPLACE FUNCTION "a2Proc"()
  RETURNS SETOF a2  AS ...............
[/code]

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.

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

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

[code]
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$
[/code]

Dopiera przy jej wywoływaniu występuje błąd.
[code]
ERROR:  subquery must return only one column
[/code]

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.]]></description>
			<author><![CDATA[dummy@example.com (Rogo)]]></author>
			<pubDate>Sun, 21 Aug 2011 18:17:37 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2640#p2640</guid>
		</item>
	</channel>
</rss>
