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