Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Użycie WHERE ... IN () w ciele funkcji.
MikroUser
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 5.09.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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).


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
MikroUser
post
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 5.09.2006

Ostrzeżenie: (0%)
-----


a IN łyknie tablicę?

  1. WHERE id IN (array) ?


Dobra, sprawdzę.

Dzięki winksmiley.jpg
Go to the top of the page
+Quote Post
wojtekmki
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 18.04.2007

Ostrzeżenie: (0%)
-----


a próbowałeś

  1. FOR zm IN execute 'SELECT imie FROM test WHERE id in (''||par||'')'
questionmark.gif

Ten post edytował wojtekmki 19.04.2007, 15:46:18
Go to the top of the page
+Quote Post
Jabol
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
prond
post
Post #6





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował prond 30.04.2007, 08:47:23


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 05:53