From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Bill Thoen <bthoen(at)gisnet(dot)com> |
Cc: | pgsql-general General <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: How to Declare Functions Containing OUT PArameters? |
Date: | 2010-07-14 18:40:53 |
Message-ID: | AANLkTil5ghAyigKkUTeXHdg78Mqw-8n9K1-vqgNW2_pD@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hello
PostgreSQL use OUT params very untypically. You can't to directly to
join OUT parameter with some variable. It isn't possible.
please, try
CREATE OR REPLACE FUNCTION foo(a int, b int, OUT c int, OUT d int)
RETURNS record AS $$
BEGIN
c := a + 1;
d := b + 1;
RETURN;
END;
$$ LANGUAGE plpgsql strict immutable;
CREATE OR REPLACE FUNCTION use_foo()
RETURNS void AS $$
DECLARE r record AS $$
BEGIN
r := foo(10,20);
RAISE NOTICE '% %', r.c, r.d;
END;
$$ LANGUAGE plpgsql immutable;
SELECT use_foo();
Regard
Pavel Stehule
2010/7/14 Bill Thoen <bthoen(at)gisnet(dot)com>:
> I'm having some difficulty getting plpgsql to recognize a function with a
> couple of OUT parameters. I'm either declaring the function incorrectly,
> making the call to it in the wrong way or my program is simply possessed by
> evil spirits. I'm using Postgres 8.1.5.
> What appears to be happening is that it's declaring the function as if it
> returned a record and had only two parameters, but I'm trying to call it
> with four parameters, with two of them being OUT parameters. So the compiler
> sees two different versions of the function and refused to do anything more.
> The example below shows the problem, but it's just something to exercise the
> function calls and generate the error. Can anyone spot the screw-up in this
> little example? (the error message is listed below in the block comment)
> TIA,
> -Bill Thoen
>
> CREATE OR REPLACE FUNCTION fishy( s1 text, s2 text, OUT n integer, OUT f
> real ) AS $$
> DECLARE
> c integer;
> BEGIN
> c := length( s1 );
> n := length( s1 || s2 );
> f := c::real / n::real;
> END;
> $$ LANGUAGE plpgsql;
>
> CREATE OR REPLACE FUNCTION main() RETURNS VOID AS $$
> DECLARE
> str1 text;
> str2 text;
> num integer := 0;
> fnum real := 0.0;
> BEGIN
> str1 := 'One fish, two fish';
> str2 := 'Shark fish, No fish';
> SELECT fishy( str1, str2, num, fnum) ;
>
> RAISE NOTICE 'fishy() analysis: % %', num, fnum;
> END;
> $$ LANGUAGE plpgsql;
>
> SELECT main();
>
> /* ERROR MESSAGE
>
> psql:ex_out_fail.sql:28: ERROR: function fishy(text, text, integer, real)
> does not exist
> HINT: No function matches the given name and argument types. You may need
> to add explicit type casts.
> CONTEXT: SQL statement "SELECT fishy( $1 , $2 , $3 , $4 )"
> PL/pgSQL function "main" line 9 at SQL statement
>
> And when I run \df from the pgsql command line, it shows up like this:
> | fishy | record | text, text
>
> */
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>
From | Date | Subject | |
---|---|---|---|
Next Message | Joshua D. Drake | 2010-07-14 18:51:31 | Re: How to Declare Functions Containing OUT PArameters? |
Previous Message | Bill Thoen | 2010-07-14 18:21:57 | How to Declare Functions Containing OUT PArameters? |