PostgreSQL:错误:语法错误在或附近" - "

时间:2014-07-23 07:43:13

标签: postgresql

这里我需要用一些参数调用一个函数。

示例

功能

create or replace function testfunction(ids int,pcname varchar)
returns void as
$$
declare
       sql varchar;
       qu varchar := 'tabletemp_';
begin
       qu := qu ||ids ||'_'|| pcname;
       sql := 'Drop view if exists '||qu;

       raise info '%',sql;
       execute sql;
 end;
 $$
 language plpgsql;

调用函数

select testfunction(1,'abc-pc'); 

错误

ERROR:  syntax error at or near "-"
Drop view if exists tabletemp_1_abc-pc
                                   ^

问题:如何在调用函数时传递这样的参数?

2 个答案:

答案 0 :(得分:2)

你忘了quote_ident

   sql := 'Drop view if exists '|| quote_ident(qu);

但您最好使用format

   sql := format('Drop view if exists %I', qu || ids ||'_'|| pcname);

答案 1 :(得分:2)

试试这个:

create or replace function testfunction(ids int,pcname varchar)
returns void as
$$
declare
       sql varchar;
       qu varchar := 'tabletemp_';
begin
       qu := qu ||ids ||'_'|| pcname;
       sql := 'Drop view if exists "'||qu||'"';

       raise info '%',sql;
       execute sql;
 end;
 $$
 language plpgsql;

这里我在表名周围添加双引号。