1

Temat: select ... into ...

Witam,
mam pytanie dotyczące komendy select into

Zauważyłam dziwną zależność,
gdy wykonuję selecta:

   select cl.client_number, cl.segment_code
    from smiw.smiw_tab_clients cl, smiw.smiw_tab_clients_accounts ca
    where  ca.account_number=1008
    and    ca.role02='1'
    and    ca.client_number=cl.client_number;

otrzymuję wynik:

client_number | segment_code
---------------+--------------
          4648 | 2
          4649 | 2

natomiast przy wykorzystaniu tego selecta w funkcji i przypisaniu ich do zmiennych
        select cl.client_number, cl.segment_code into v_client, v_segm
     from smiw.smiw_tab_clients cl, smiw.smiw_tab_clients_accounts ca
     where  ca.account_number=account_number
     and    ca.role02='1'
     and    ca.client_number=cl.client_number;

wykonuje się zapytanie, tylko dla jednego, pierwszego rekordu z otrzymanego wyniku:

smiw=> select aaa_f_test(1008,'2008-08-22');
NOTICE:  4648  2
NOTICE:  A1
aaa_f_test
-------------

(1 row)

CZY TO JEST BŁĄD CZY ŚWIADOME DZIAŁANIE POSTGRESA?
spodziewałabym się raczej, że funkcja zwróci błąd...

2

Odp: select ... into ...

Wydaje sie ze musisz zrobic petle, do wykonywania takich operacji lepsze sa cursory.

3

Odp: select ... into ...

Nie o to mi chodzi.
Założenie jest takie, że select ten (przy prawidłowych danych w tabelach) ma zwracać tylko jedną wartość - wtedy nie potrzebuję kursora.
Okazało się, że dane wejściowe były złe i oczekiwałam, że funkcja nie wykona się a tylko zaloguje błąd. Ku mojemu zdziwieniu błąd się nie pojawił a funkcja wykonała się dla pierwszej znalezionej wartości.

np. Oracle w przypadku próby przypisania więcej niż jednej wartości do zmiennej w "select ... into ..." zwraca błąd

Ostatnio edytowany przez agniecha (2008-08-22 11:29:54)

4

Odp: select ... into ...

Jak widać postgres zwraca pierwszy (cokolwiek by znaczyło słowo 'pierwszy') wiersz.

5

Odp: select ... into ...

by być dokładnym - "pierwszy znaleziony"