<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Problem z typami danych i funkcją]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=439</link>
		<description><![CDATA[Najświeższe odpowiedzi w Problem z typami danych i funkcją.]]></description>
		<lastBuildDate>Tue, 18 May 2010 18:13:33 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Problem z typami danych i funkcją]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2039#p2039</link>
			<description><![CDATA[Powinno być tak
[code]
for usuwane_rekordy in SELECT id FROM X where <jakis warunek> loop
...
<i w tej pętli po kolei pod zmienną usuwane_rekordy będą podstawiane wartości z kolumny id>
<więc wystarczy tu wywoałć funkcję kasującą z parametrem usuwane_rekordy.>
...


end loop;
[/code]
Tyle że X w selecie powinien byc z góry znaną tabelą a nie zmienną.
Jeśli X miałoby być zmienną to powinieneś napisać
[code]
for usuwane_rekordy in execute 'SELECT id FROM '||X||' where <jakis warunek>' loop
...
<i w tej pętli po kolei pod zmienną usuwane_rekordy będą podstawiane wartości z kolumny id>
<więc wystarczy tu wywoałć funkcję kasującą z parametrem usuwane_rekordy.>
...


end loop;
[/code]]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 18 May 2010 18:13:33 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2039#p2039</guid>
		</item>
		<item>
			<title><![CDATA[Problem z typami danych i funkcją]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2038#p2038</link>
			<description><![CDATA[Witam
Z bazami miałem już kiedyś coś do czynienia... tzn. z prostymi zapytaniami SQL'owymi. Dziś przyszło mi napisać całą bazę, no i konieczne było stworzenie kilku triggerów i funkcji. No i pojawił się problem... (Funkcję piszę w języku PLPGSQL).

W pewnej funkcji A mam wywołanie innej funkcji B. Funkcja B przyjmuje jako argument liczbę integer będąca nr ID w danej tabeli Z, działanie funkcji jest proste: usuwa ona rekord z tabeli Z o ID przekazanym jako argument. W funkcji A, ID które przekazywane do funkcji B jest pobierane z tabeli X, problem jest taki, że nie jest to jedno ID tylko kolumna tabeli X składająca się z 0 lub więcej wierszy (0 lub więcej IDków).  Zastosował bym tu jakąś pętle, np. FOR. Tylko nie wiem w jaką zmienną (typ tej zmiennej) "zapakować" wynik zapytania zwracającego kolumnę IDków, które chce przekazać do funkcji B. 

Oczywiście googlowałem co nieco i coś znalazłem: mianowicie %TYPE. Wtedy w ciele funckji mam cos takiego:

[code]
-- ...
-- ...
-- ...
DECLARE
    usuwane_rekordy X.id%TYPE
BEGIN

    SELECT id INTO usuwane_rekordy FROM X where <jakis warunek>
-- ....
-- ....
-- ....
END;

[/code]


Nie wiem czy idę w dobrym kierunku... czy idzie się jakoś odnieść do pojedynczych rekordów zawartych w zmiennej usuwane_rekordy?
Tzn powiedzmy, że zapytanie pobrało 4 wyniki i zapisało do zmiennej usuwane_rekordy. Czy można teraz walnąć pętle FOR na 4 iteracje i w każdej z niej wykonać funkcję B z kolejnym nr ID?

Jeśli ktoś zrozumiał o co mi chodzi :P i ma jakiś pomysł, propozycję, sugestię jak to ugryźć to dawać :)
Będe wdzięczny za jakikolwiek trop ;)]]></description>
			<author><![CDATA[dummy@example.com (xbierax)]]></author>
			<pubDate>Tue, 18 May 2010 18:06:55 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2038#p2038</guid>
		</item>
	</channel>
</rss>
