Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Użycie WHERE ... IN () w ciele funkcji.
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
MikroUser
Witam.

1)
  1. CREATE OR REPLACE FUNCTION get_name(character varying) RETURNS varchar
  2. DECLARE
  3. par alias $1;
  4. zm varchar;
  5. zm_return varchar;
  6. BEGIN zm_return := '';
  7. FOR zm IN SELECT imie FROM test WHERE id IN (par)
  8. LOOP
  9. zm_return := zm_return|| ',' || zm;
  10. END LOOP;
  11.  
  12. RETURN zm_return;
  13. END;


2)
  1. SELECT * FROM get_name('10,20,30');


I rezultat jest NULL. Czemu? W czym jest kłopot przesyłania do funkcji zmiennej typu varchar i potem użycia danej zmiennej w selekcie dla klauzuli IN ?

Dziękuję za odpowiedzi.

PS. Kiedyś wiedziałem tego typu post, ale nie mogę odnaleźć sadsmiley02.gif
DeyV
powinno być chyba tak:
  1. CREATE OR REPLACE FUNCTION get_name( int[] ) RETURNS varchar
  2. ...
  3.  
  4. SELECT * FROM get_name( {10,20,30} );


Albo skorzystaj z funkcji rozbijającej string na tablicę (jeśli takowa w PG istnieje - nie pamiętam).
MikroUser
a IN łyknie tablicę?

  1. WHERE id IN (array) ?


Dobra, sprawdzę.

Dzięki winksmiley.jpg
wojtekmki
a próbowałeś

  1. FOR zm IN execute 'SELECT imie FROM test WHERE id in (''||par||'')'
questionmark.gif
Jabol
A zauważyłeś, że masz character varying jako argument? Może więc tak by wstawić character varying, np
  1. SELECT * FROM get_name('(10,20,30)');
I to z tym co podał wojtekmki powinno zadziałać.
prond
Dla tablic używasz funkcji ANY :

Odpowiednik in_array:
  1. costam = ANY ( tablica )

i zaprzeczenie :
  1. costam <> ANY (tablicy)


Znajdziesz to w manualu : http://www.postgresql.org/docs/7.4/interac...omparisons.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.