Strona 2 z 6

: 21 października 2011, 21:46
autor: Bastian
Spoko.

Kod: Zaznacz cały

CREATE FUNCTION update_passwd(varchar(40), varchar(40)) RETURNS integer AS '  
DECLARE   
myuser ALIAS FOR $1; 
nowypass ALIAS FOR $2; 
update_re integer; 
tenuser varchar;  
BEGIN  
SELECT username INTO tenuser FROM public.mailbox WHERE username= myuser; 
IF NOT FOUND THEN 
update_re:=0; 
RETURN update_re[B];[/B]
END IF; 
UPDATE public.mailbox SET password=md5(nowypass) WHERE user=tenuser; 
update_re:=1; 
RETURN update_re; 
END;' language 'plpgsql';
Niestety nie mam pod reka postgresa akturat zeby przetestować, więc testować musisz ty ;)

: 24 października 2011, 08:53
autor: LordRuthwen
Funkcja przeszła, jak wysyłam zapytanie to niby przechodzi, ale coś mi to nie bardzo działa jak trzeba bo dalej się dostaję na starym haśle a nie na nowym.
Skrót hasła w bazie się nie zmienia.

: 24 października 2011, 09:48
autor: Bastian

Kod: Zaznacz cały

CREATE FUNCTION update_passwd(varchar(40), varchar(40)) RETURNS integer AS '  
DECLARE   
myuser ALIAS FOR $1; 
nowypass ALIAS FOR $2; 
update_re integer; 
tenuser varchar;  
BEGIN  
SELECT public.username INTO tenuser FROM public.mailbox WHERE public.username= myuser; 
IF NOT FOUND THEN 
update_re:=0; 
RETURN update_re;
END IF; 
UPDATE public.mailbox SET public.password=md5(nowypass) WHERE public.user=tenuser; 
update_re:=1; 
RETURN update_re; 
END;' language 'plpgsql';

: 24 października 2011, 09:59
autor: LordRuthwen

Kod: Zaznacz cały

2011-10-24 10:03:56 CEST ERROR:  missing FROM-clause entry for table "public" at character 8
2011-10-24 10:03:56 CEST QUERY:  SELECT public.username FROM public.mailbox WHERE public.username=  $1
2011-10-24 10:03:56 CEST CONTEXT:  PL/pgSQL function "update_passwd" line 8 at SQL statement
2011-10-24 10:03:56 CEST STATEMENT:  SELECT update_passwd('lukasz@poczta.blabla', '$a;wjhiawgerghawi;areyhab')
Ale jak poprawię:

Kod: Zaznacz cały

SELECT FROM public.username INTO tenuser FROM public.mailbox WHERE public.username= myuser; 
To mi pluje błędem:

Kod: Zaznacz cały

ERROR:  syntax error at or near "FROM" 
LINE 1: SELECT FROM public.username FROM public.mailbox WHERE public... 
               ^ 
QUERY:  SELECT FROM public.username FROM public.mailbox WHERE public.username=  $1  
CONTEXT:  SQL statement in PL/PgSQL function "update_passwd" near line 8

: 24 października 2011, 10:09
autor: Bastian
Wykonaj z palca to polecenie:

Kod: Zaznacz cały


SELECT username INTO tenuser FROM public.mailbox WHERE username= <jakis uzytkownik>;  

: 24 października 2011, 10:10
autor: Bastian
SELECT FROM public.username INTO tenuser FROM public.mailbox WHERE public.username= myuser;

A gdzie ja podaje takie polecenie?

: 24 października 2011, 10:17
autor: LordRuthwen
Nigdzie:

Kod: Zaznacz cały


missing FROM-clause entry for table "public" at character 8
Nie chciało przejść więc myślałem, że o to chodzi.
Proszę bardzo:

Kod: Zaznacz cały

Błąd SQL:
ERROR:  column "lukasz" does not exist
LINE 1: ...e INTO tenuser FROM public.mailbox WHERE username=lukasz@...
                                                            ^
W poleceniu:
SELECT username INTO tenuser FROM public.mailbox WHERE username=lukasz@poczta.blabla


: 24 października 2011, 10:34
autor: Bastian

Kod: Zaznacz cały


SELECT username INTO tenuser FROM public.mailbox WHERE username='lukasz@poczta.blabla'

: 24 października 2011, 10:48
autor: LordRuthwen

Kod: Zaznacz cały

ERROR:  relation "tenuser" already exists
I nic poza tym.

: 24 października 2011, 11:41
autor: Bastian

Kod: Zaznacz cały

 DROP function update_passwd(varchar(40), varchar(40));
i jeszcze raz

Kod: Zaznacz cały

SELECT username INTO tenuser FROM public.mailbox WHERE username='lukasz@poczta.blabla'