[postgis-users] Problem with syntax in function
Mark Cave-Ayland
mark.cave-ayland at ilande.co.uk
Tue May 22 15:02:09 PDT 2007
On Tue, 2007-05-22 at 23:20 +0200, Ludovico Bianchini wrote:
> I'm using PostgreSQL 8.1. Trying this
>
> CREATE OR REPLACE FUNCTION
> myschema.sel_by_pos(varchar, varchar, varchar,
> varchar)
> RETURNS SETOF myschema.mytable AS
> $BODY$
> select * from myschema.mytable where (geom_column
> &&
> SetSRID('BOX3D(' || $1 || ' ' || $2 || ', ' || $3 ||
> ' ' || $4 || ')'::box3d, 26591))
> $BODY$> LANGUAGE 'sql' VOLATILE;
>
> I get: ERROR: BOX3D parser - doesnt start with BOX3D(
> CONTEXT: SQL function "sel_by_pos"
>
> I'm in very trouble with this behaviour...
Hi Ludovico,
Because you are building up a parameter using string operators, you need
to generate the SQL statement as a string and then execute it. So you'll
need to use PL/PGSQL rather than just SQL, e.g. something like:
CREATE OR REPLACE FUNCTION
myschema.sel_by_pos(varchar, varchar, varchar, varchar)
RETURNS SETOF myschema.mytable AS
$$
DECLARE
str text;
rec record;
BEGIN
str := 'select * from myschema.mytable where (geom_column
&& SetSRID(''BOX3D(' || $1 || ' ' || $2 || ', ' || $3 ||
' ' || $4 || ')''::box3d, 26591))';
-- For debugging only
raise notice 'str is: %', str;
for rec in execute str loop
return next rec;
end loop;
END
$$ LANGUAGE 'plpgsql' VOLATILE;
Kind regards,
Mark.
--
ILande - Open Source Consultancy
http://www.ilande.co.uk
More information about the postgis-users
mailing list