<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Problem z typami danych i funkcją]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=439&amp;type=atom"/>
	<updated>2010-05-18T18:13:33Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=439</id>
		<entry>
			<title type="html"><![CDATA[Odp: Problem z typami danych i funkcją]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2039#p2039"/>
			<content type="html"><![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]]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-05-18T18:13:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2039#p2039</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Problem z typami danych i funkcją]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2038#p2038"/>
			<content type="html"><![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 ;)]]></content>
			<author>
				<name><![CDATA[xbierax]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1104</uri>
			</author>
			<updated>2010-05-18T18:06:55Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2038#p2038</id>
		</entry>
</feed>
