Обсуждение: Am I entering a world of pain...
...by trying to port a SQL Server application to Postgresql?
I am unable to get a simple function to work. Any ideas as to what is wrong
with it?
create or replace function droptable (varchar(255)) returns void as '
begin
drop table $1;
return;
end;
' language 'plpgsql';
This is what happens when I execute the function:
select droptable('asdfadsfasfd');
WARNING: Error occurred while executing PL/pgSQL function droptable
WARNING: line 2 at SQL statement
ERROR: parser: parse error at or near "$1" at character 13
Regards
AM
On Tue, 12 Aug 2003, Aled Morris wrote:
> ...by trying to port a SQL Server application to Postgresql?
>
> I am unable to get a simple function to work. Any ideas as to what is wrong
> with it?
>
> create or replace function droptable (varchar(255)) returns void as '
> begin
> drop table $1;
> return;
> end;
> ' language 'plpgsql';
>
> This is what happens when I execute the function:
>
> select droptable('asdfadsfasfd');
> WARNING: Error occurred while executing PL/pgSQL function droptable
> WARNING: line 2 at SQL statement
> ERROR: parser: parse error at or near "$1" at character 13
We don't support using variables directly for object names like that,
you'd have to do something like
EXECUTE ''drop table '' || $1;
Aled Morris <aled@tesco.net> writes:
> create or replace function droptable (varchar(255)) returns void as '
> begin
> drop table $1;
> return;
> end;
> ' language 'plpgsql';
Try
execute ''drop table '' || $1;
instead. See the plpgsql manual's overview for an explanation why you
can't use variables as table/field names except through EXECUTE.
regards, tom lane