Thread: problem with PL/pgSQL
I have a table and a function defined like that :
create table trafic (
statie text,
traf_in int8 default 0,
traf_out int8 default 0
);
statie text,
traf_in int8 default 0,
traf_out int8 default 0
);
create function addtrafic (text, int8, int2) returns int2 as '
declare
statia alias for $1 ;
traficul alias for $2 ;
directia alias for $3 ;
begin
select * from trafic where statie= $1;
if not found then
insert into trafic (statie) values( $1 );
endif;
if $3 < 1 then
update trafic set traf_in=traf_in+ $2 where statie= $1;
else
update trafic set traf_out=traf_out+ $2 where statie= $1;
endif;
return $3 ;
end;
' language 'plpgsql';
declare
statia alias for $1 ;
traficul alias for $2 ;
directia alias for $3 ;
begin
select * from trafic where statie= $1;
if not found then
insert into trafic (statie) values( $1 );
endif;
if $3 < 1 then
update trafic set traf_in=traf_in+ $2 where statie= $1;
else
update trafic set traf_out=traf_out+ $2 where statie= $1;
endif;
return $3 ;
end;
' language 'plpgsql';
when I run this SQL :
select addtrafic('station1',10,0) as test;
I got an error like that :
NOTICE: plpgsql: ERROR during compile of addtrafic near line 20
ERROR: parse error at or near ";"
and i don't know what is wrong, can someone help me ?
I insert my response in your text Tiberiu Craciun wrote: > I have a table and a function defined like that : create table trafic > ( > statie text, > traf_in int8 default 0, > traf_out int8 default 0 > ); create function addtrafic (text, int8, int2) returns int2 as ' > declare > statia alias for $1 ; > traficul alias for $2 ; > directia alias for $3 ; > begin > select * from trafic where statie= $1; > if not found then > insert into trafic (statie) values( $1 ); there is an error here ^ the good sentence is : insert into trafic (statie) values ($1) ; > endif; > if $3 < 1 then > update trafic set traf_in=traf_in+ $2 where statie= > $1; > else > update trafic set traf_out=traf_out+ $2 where statie= > $1; > endif; > return $3 ; > end; > ' language 'plpgsql'; when I run this SQL : select > addtrafic('station1',10,0) as test; I got an error like that : NOTICE: > plpgsql: ERROR during compile of addtrafic near line 20ERROR: parse > error at or near ";" and i don't know what is wrong, can someone help > me ? -- Basier Eric e-mail : basier@ipgp.jussieu.fr http://geoscope.ipgp.jussieu.fr IPGP Observatoires Sismologie-Volcanologie 4,Place Jussieu 75005 Paris Tour 24-14 4eme Etage Tel 01 44 27 38 96
Your function have some bugs; 1) The parser doesn't understand keywords like ENDIF but END IF (two words) 2) You must to use keyword INTO with the select command try this one instead: create function addtrafic (text, int8, int2) returns int2 as ' declare boo text; statia alias for $1 ; traficul alias for $2 ; directia alias for $3 ; begin select statie from trafic into boo where statie=$1; if not found then insert into trafic (statie) values( $1 ); end if; if $3< 1 then update trafic set traf_in=traf_in+ $2 where statie= $1; else update trafic set traf_out=traf_out+ $2 where statie= $1; end if; return $3 ; end; ' language 'plpgsql'; Tiberiu Craciun ha scritto: > Part 1.1 Type: Plain Text (text/plain) > Encoding: quoted-printable -- ______________________________________________________________ PostgreSQL 6.5.0 on i586-pc-linux-gnu, compiled by gcc 2.7.2.3 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jose'