Search Postgresql Archives

Re: SQL works but same function is confused

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

 



On 04/01/2014 05:10 PM, Bui, Michelle P wrote:
Hi all,

I have this query that when executed as a SQL statement, it works
perfect! The table tools contains many records in a time series, with
attributes like category but without the field status. I assign the
value of status ’active’ or ‘inactive’ depending on whether the tool
record exists after a certain time (number of seconds).



However, when I write a function to return the same result, using this
SQL statement, and I declare a local variable v_status TEXT; it errors
out when executed.  The key complaint is:

ERROR:  column reference "v_status" is ambiguous...

DETAIL:  It could refer to either a PL/pgSQL variable or a table column.

The function returns table (category, status, and tool_count) using
RETURN QUERY in front of the query.

I used <<block>> before Declare section and try using block.v_status but
this is not allowed (has syntax error). When I use #variable_conflict
use_variable, there is no error anymore, but the resulted Status field
is null. Seemed like Postgresql does not assign the v_status as we wish.

/CREATE OR REPLACE FUNCTION get_status/

/RETURNS TABLE (category SMALLINT, status TEXT, tool_count BIGINT) AS/

/$BODY$/

//

#variable_conflict use_variable

/DECLARE/

/v_status TEXT;/

I am not seeing where v_status is being used. Below it is an alias name in the query, which is where the conflict is coming in.



/BEGIN/

/    RETURN QUERY SELECT category, v_status as status, count (tool_id)
AS tool_count/

/    FROM /

/    (SELECT distinct category, tool_id, ‘active’ as v_status/

/FROM tools/

/                                 WHERE time >= 123456/

/                                UNION/

/                SELECT distinct e1.category, e1.tool_id, ‘inactive’ as
v_status/

/                FROM tools e1/

/                WHERE not exists/

/                                (SELECT e2.category, e2.tool_id/

/                                FROM tools e2/

/                                WHERE e2.sim_time >= 123456/

/                                AND e2.category = e1.category/

/                                AND e2.tool_id = e1.tool_id)/

/   ) AS derivedTable/

/GROUP BY category, Status;/

//

/END; $BODY$/

/LANGUAGE plpgsql;/

Thanks in advance for your insight or suggestion!

Michelle



--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx


--
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