Thread: problem with function in plpgsql

problem with function in plpgsql

From
Eric BASIER
Date:
Hello;
I have a table pz like this :
Table    = pz
+----------------------------------+----------------------------------+-------+

|              Field               |              Type                |
Length|
+----------------------------------+----------------------------------+-------+

| cle                              | int4 not null
|     4 |
| titre                            | varchar() not null
|    25 |
| typ                              | char() not null
|     1 |
| in_unit                          | int4 not null
|     4 |
| out_unit                         | int4 not null
|     4 |
| pcterr                           | float8
|     8 |
| a0                               | float8
|     8 |
| af                               | float8
|     8 |
| desctype                         | varchar()
|     4 |
| description                      | int8
|     8 |
+----------------------------------+----------------------------------+-------+

I have to create a function who take me one row like that
 create function test_exist_pz (text,int4,int4,float,float) returns text
as '
declare
  pzrec pz%RowType;
begin
  select * into pzrec
   from pz
   where typ = $1
     and in_unit = $2
     and out_unit = $3
     and A0 = $4
     and AF = $5;
  if not found then
    pzrec.cle = -1;
  end if;
  return pzrec;
end;
' language 'plpgsql';
CREATE
When I try to work with the function it doesn't I have this result :
seed=> select test_exist_pz('a',1,1,1.1,1.2);
ERROR:  attribute 'pzrec' not found
I am not very familiar with plpgsql and so if there is somebody
who can help me or if thre is somebody who can say where can
I find documentation about plpgsql it is very well

Thanks


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




Re: [SQL] problem with function in plpgsql

From
tolik@icomm.ru (Anatoly K. Lasareff)
Date:
>>>>> "EB" == Eric BASIER <basier@ipgp.jussieu.fr> writes:

 EB> Hello;
 EB> I have a table pz like this :
 EB> Table    = pz
 EB> +----------------------------------+----------------------------------+-------+

. . .

 EB> I have to create a function who take me one row like that
 EB> create function test_exist_pz (text,int4,int4,float,float) returns text
 EB> as '
 EB> declare
 EB> pzrec pz%RowType;
 EB> begin
 EB> select * into pzrec
 EB> from pz
 EB> where typ = $1
 EB> and in_unit = $2
 EB> and out_unit = $3
 EB> and A0 = $4
 EB> and AF = $5;
 EB> if not found then
 EB> pzrec.cle = -1;
 EB> end if;
 EB> return pzrec;
 EB> end;
 EB> ' language 'plpgsql';
 EB> CREATE
 EB> When I try to work with the function it doesn't I have this result :
 EB> seed=> select test_exist_pz('a',1,1,1.1,1.2);
 EB> ERROR:  attribute 'pzrec' not found
 EB> I am not very familiar with plpgsql and so if there is somebody
 EB> who can help me or if thre is somebody who can say where can
 EB> I find documentation about plpgsql it is very well

There is at least one error in your text: function test_exist_pz
returns 'text' type, but you write 'return pzrec', value of
pz%RowType. If you need know - exist or no any row you can retype function:

  create function test_exist_pz (text,int4,int4,float,float) returns bool
  as '
  declare
    c int;
  begin

    select count(*) into pzrec
    from pz
    where typ = $1
    and in_unit = $2
    and out_unit = $3
    and A0 = $4
    and AF = $5;

    return (c > 0);
  end;
' language 'plpgsql';

But this function you can also code in 'sql' but no 'plpgsql' language.

--
Anatoly K. Lasareff              Email:       tolik@icomm.ru
Senior programmer