BUG #5001: can not prepare for where $1 is null

Started by terryover 16 years ago2 messagesbugs
Jump to latest
#1terry
94487509@qq.com

The following bug has been logged online:

Bug reference: 5001
Logged by:
Email address: 94487509@qq.com
PostgreSQL version: 8.3.3
Operating system: linux
Description: can not prepare for where $1 is null
Details:

why can not prepare like this? thanks!
prepare ssss as select * from test where $1 is null;
ERROR: could not determine data type of parameter $1

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: terry (#1)
Re: BUG #5001: can not prepare for where $1 is null

Hello

2009/8/21 <94487509@qq.com>:

The following bug has been logged online:

Bug reference:      5001
Logged by:
Email address:      94487509@qq.com
PostgreSQL version: 8.3.3
Operating system:   linux
Description:        can not prepare for where $1 is null
Details:

why can not prepare like this? thanks!
 prepare ssss as select * from test where $1 is null;
 ERROR:  could not determine data type of parameter $1

Probably you are thinking, so first parameter is name of column. But
this is wrong idea. You cannot parametrize column or table names. In
this case - first parameter will be constant expression - with null
value it returns all rows, with not null value - it returns no row.

If you wont to do filter query via some name you have to use dynamic sql:

create or replace function ssss(_name varchar)
returns setof test as $$
declare _r record;
begin
for _r in execute 'select * from test where ' || quote_ident(_name)
|| ' is null'
loop
return next r;
end loop;
return;
end;
$$ language plpgsql;

regards
Pavel Stehule

Show quoted text

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs