Re: SELECT in a function != SELECT ?

From: Joe Conway <mail(at)joeconway(dot)com>
To: Ian Morgan <imorgan(at)webcon(dot)net>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: SELECT in a function != SELECT ?
Date: 2002-04-25 06:13:37
Message-ID: 3CC79E91.5070903@joeconway.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Ian Morgan wrote:
> CREATE FUNCTION get_colname (name,smallint)
> RETURNS name AS '
> SELECT a.attname FROM pg_class c, pg_attribute a
> WHERE c.relname = ''$1''
> and a.attnum = $2 and a.attrelid=c.oid
> '
> LANGUAGE SQL;
>
> SELECT get_colname('contacts',3);
>
> get_colname
> -------------
>
> (1 row)
>

Try this:

test=# CREATE FUNCTION get_colname (name,smallint) RETURNS name AS
'SELECT a.attname FROM pg_class c, pg_attribute a WHERE c.relname = $1
and a.attnum = $2 and a.attrelid=c.oid' LANGUAGE SQL;
CREATE
test=# SELECT get_colname('foo',3);
get_colname
-------------
f3
(1 row)

The $1 is already known to be a name, so you don't want the '' around it
in the function definition.

>
> The result is empty!?
>
> Even more strange:
>
> SELECT 'x'||get_colname('contacts',3)||'x' as foo;
>
> foo
> -----
>
> (1 row)
>
> Should I not be seeing "xx" as the result here!? What's going on? Anyone
> wknow why the above function get_colname isn't doing what I expect?
>

No, this is correct. The function is returning NULL, and anything
concatenated with NULL is still NULL.

HTH,

Joe

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Rajesh Kumar Mallah 2002-04-25 06:52:28 Database Server in Recovery mode!
Previous Message Ian Morgan 2002-04-25 05:44:15 SELECT in a function != SELECT ?