Thread: declare variable in udf

declare variable in udf

From
Peter Kroon
Date:
Hello,

How do I declare a variable after BEGIN?
I want to declare it in the if statement.

DROP FUNCTION IF EXISTS tmp_test(integer);
CREATE FUNCTION tmp_test(
p_id integer
)
RETURNS text
AS $$
DECLARE the_return_value text;
BEGIN
DROP TABLE IF EXISTS temp_test_table;
CREATE TEMP TABLE temp_test_table(
some_value text
);
INSERT INTO temp_test_table
SELECT data FROM table WHERE id=p_id;
SELECT INTO the_return_value some_value FROM temp_test_table;

IF 1=1 THEN
                --how do I declare a variable here? it this possible?
RAISE NOTICE 'this is a notice';
END IF;

RETURN the_return_value;

END;
$$ language plpgsql


Best,
Peter

Re: declare variable in udf

From
Raymond O'Donnell
Date:
On 21/11/2012 11:42, Peter Kroon wrote:
> Hello,
>
> How do I declare a variable after BEGIN?
> I want to declare it in the if statement.
>
> DROP FUNCTION IF EXISTS tmp_test(integer);
> CREATE FUNCTION tmp_test(
> p_id integer
> )
> RETURNS text
> AS $$
> DECLARE the_return_value text;
> BEGIN
> DROP TABLE IF EXISTS temp_test_table;
> CREATE TEMP TABLE temp_test_table(
> some_value text
> );
> INSERT INTO temp_test_table
> SELECT data FROM table WHERE id=p_id;
> SELECT INTO the_return_value some_value FROM temp_test_table;
>
> IF 1=1 THEN
>                 --how do I declare a variable here? it this possible?
> RAISE NOTICE 'this is a notice';
> END IF;
>
> RETURN the_return_value;
>
> END;
> $$ language plpgsql

I don't think that is possible - you have to declare all your variables
in the DECLARE section.

Ray.

--
Raymond O'Donnell :: Galway :: Ireland
rod@iol.ie


Re: declare variable in udf

From
Peter Kroon
Date:
So, multiple DECLARE sections are not allowed?


2012/11/21 Raymond O'Donnell <rod@iol.ie>
On 21/11/2012 11:42, Peter Kroon wrote:
> Hello,
>
> How do I declare a variable after BEGIN?
> I want to declare it in the if statement.
>
> DROP FUNCTION IF EXISTS tmp_test(integer);
> CREATE FUNCTION tmp_test(
> p_id integer
> )
> RETURNS text
> AS $$
> DECLARE the_return_value text;
> BEGIN
> DROP TABLE IF EXISTS temp_test_table;
> CREATE TEMP TABLE temp_test_table(
> some_value text
> );
> INSERT INTO temp_test_table
> SELECT data FROM table WHERE id=p_id;
> SELECT INTO the_return_value some_value FROM temp_test_table;
>
> IF 1=1 THEN
>                 --how do I declare a variable here? it this possible?
> RAISE NOTICE 'this is a notice';
> END IF;
>
> RETURN the_return_value;
>
> END;
> $$ language plpgsql

I don't think that is possible - you have to declare all your variables
in the DECLARE section.

Ray.

--
Raymond O'Donnell :: Galway :: Ireland
rod@iol.ie

Re: declare variable in udf

From
Pavel Stehule
Date:
2012/11/21 Peter Kroon <plakroon@gmail.com>:
> So, multiple DECLARE sections are not allowed?

it  is not allowed in plpgsql

resp. DECLARE is related to block - if you use nested block, then you
can use nested DECLAREs

Regards

Pavel Stehule


>
>
> 2012/11/21 Raymond O'Donnell <rod@iol.ie>
>>
>> On 21/11/2012 11:42, Peter Kroon wrote:
>> > Hello,
>> >
>> > How do I declare a variable after BEGIN?
>> > I want to declare it in the if statement.
>> >
>> > DROP FUNCTION IF EXISTS tmp_test(integer);
>> > CREATE FUNCTION tmp_test(
>> > p_id integer
>> > )
>> > RETURNS text
>> > AS $$
>> > DECLARE the_return_value text;
>> > BEGIN
>> > DROP TABLE IF EXISTS temp_test_table;
>> > CREATE TEMP TABLE temp_test_table(
>> > some_value text
>> > );
>> > INSERT INTO temp_test_table
>> > SELECT data FROM table WHERE id=p_id;
>> > SELECT INTO the_return_value some_value FROM temp_test_table;
>> >
>> > IF 1=1 THEN
>> >                 --how do I declare a variable here? it this possible?
>> > RAISE NOTICE 'this is a notice';
>> > END IF;
>> >
>> > RETURN the_return_value;
>> >
>> > END;
>> > $$ language plpgsql
>>
>> I don't think that is possible - you have to declare all your variables
>> in the DECLARE section.
>>
>> Ray.
>>
>> --
>> Raymond O'Donnell :: Galway :: Ireland
>> rod@iol.ie
>
>


Re: declare variable in udf

From
Raymond O'Donnell
Date:
On 21/11/2012 12:01, Peter Kroon wrote:
> So, multiple DECLARE sections are not allowed?

Actually, I just had a quick look here -

  http://www.postgresql.org/docs/9.2/static/plpgsql-structure.html

- and it seems that you can have multiple declare - begin - end blocks.

Try it and see!

Ray.


--
Raymond O'Donnell :: Galway :: Ireland
rod@iol.ie