Search Postgresql Archives

Re: allowed variable names in functions?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I see  one big problem. You have colision between column and variable
names!  When you has SQL inside function use prefix for variables or
use qualified names.

DECLARE a varchar;
BEGIN
  FOR a IN SELECT a FROM ... -- is bug

you have to do
DELARE _a varchar;
BEGIN
  FOR _a IN SELECT t.a FROM tab t ...

Regards
Pavel Stehule

2008/6/30 A B <gentosaker@xxxxxxxxx>:
> Then my assumption was wrong.
> Here is the entire function and it fails with the names
> c2,c2div,c3,c3div, but if names are changed, it works!
> (by works I mean I get the "hello" lines printed) There is nothing
> wrong with the select statement either, that works fine if I run it
> stand-alone, or with the names of c2,c2div,c3,c3div changed.
>
> CREATE OR REPLACE FUNCTION foo(pid_ INTEGER) RETURNS void AS $$
> DECLARE
>        c2 REAL;
>        c2div REAL;
>        c3 REAL;
>        c3div REAL;
>        weights RECORD;
>        tmp RECORD;
>        retval RECORD;
>        t RECORD;
> BEGIN
> RAISE NOTICE 'starting...';
>        FOR tmp IN SELECT id,c2,c3 FROM Master  WHERE pid=pid_  AND c3 !=0 LOOP
>                RAISE NOTICE 'hello %',tmp.id;
>        END LOOP;
>        RETURN;
> END; $$  LANGUAGE plpgsql;
>
>
> 2008/6/30 Pavel Stehule <pavel.stehule@xxxxxxxxx>:
>> Hello
>>
>> it works in my 8.1
>>
>> postgres=# CREATE LANGUAGE plpgsql;
>> CREATE LANGUAGE
>> postgres=# create or replace function foo(a int) returns void as
>> $$declare c2 real; c2div real; begin c2div := 10.9; end; $$ language
>> plpgsql;
>> CREATE FUNCTION
>> postgres=# select foo(10);
>>  foo
>> -----
>>
>> (1 row)
>> Regards
>> Pavel Stehule
>>
>> 2008/6/30 A B <gentosaker@xxxxxxxxx>:
>>> Hello.
>>> I suspect that in a  plpgsql function
>>>
>>> DECLARE
>>> c2 REAL;
>>> cadiv REAL;
>>>
>>> works but
>>>
>>> c2 REAL;
>>> c2div REAL;
>>>
>>> doesn't.
>>>
>>> Is this true, and if so, what are the rules for the names in the
>>> function? I use 8.1.
>
> --
> Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux