Thread: problem with RECORD in a stored procedure

problem with RECORD in a stored procedure

From
Dalton Shane
Date:
HI,

I have a strange problem with regard to the RECORD type. IN plpgsql language it 
doesn't seem to recognise the data type. Does anybody have any idea why? I've 
included a sample function and the terminal output to show what I mean. I've 
also included what should have gone into table orla.

Any help would be appreciated in sorting out this frustrating problem.

Shane

CREATE FUNCTION sinead() RETURNS integer AS 'DECLARE    a integer :=0;    b RECORD;     BEGIN    FOR b IN SELECT
MIN(total)from results LOOP        INSERT INTO orla(total) VALUES(b);    END LOOP;        RETURN a;        END;
 
' LANGUAGE 'plpgsql';

-------------------------------------------------------------------------

ballina=# select sinead();
ERROR:  Attribute 'b' not found

--------------------------------------------------------------------------
ballina=# select MIN(total) from results;min 
-----  2
(1 row)

---------------------------------------------------------------------------



Re: problem with RECORD in a stored procedure

From
Stephan Szabo
Date:
On Fri, 8 Mar 2002, Dalton Shane wrote:

>
> HI,
>
> I have a strange problem with regard to the RECORD type. IN plpgsql language it
> doesn't seem to recognise the data type. Does anybody have any idea why? I've
> included a sample function and the terminal output to show what I mean. I've
> also included what should have gone into table orla.
>
> Any help would be appreciated in sorting out this frustrating problem.
>
> Shane
>
> CREATE FUNCTION sinead() RETURNS integer AS '
>     DECLARE
>         a integer :=0;
>         b RECORD;
>
>
>     BEGIN
>         FOR b IN SELECT MIN(total) from results LOOP
>             INSERT INTO orla(total) VALUES(b);

You need to specify an attribute of b to insert here (for example
b.min).

>         END LOOP;
>
>         RETURN a;
>
>
>     END;
> ' LANGUAGE 'plpgsql';



Re: problem with RECORD in a stored procedure

From
daq
Date:
B is record type and you can't insert a record into a field.
You must rewrite your code like this:

FOR b IN SELECT MIN(total) as mintotal from results LOOP               INSERT INTO orla(total) VALUES(b.mintotal);
END LOOP;

DAQ