存储函数中的语法有什么问题? (Postgres的)

时间:2013-06-15 21:22:10

标签: postgresql stored-procedures

我正在尝试在PostgreSQL中创建一个函数,该函数将删除表中第一个字母大于给定字母的所有值。任何人都可以向我解释为什么这个例子不起作用(它说在“Z”或附近有语法错误),因为如果我用一些随机字母而不是$ 1来完成这个功能,那么它的工作没有问题。

create function g3_brisi(varchar) returns void as 'delete from prezimena
where prezime between $1 and 'Z';' language sql;

我是PostgreSQL的新手,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

问题是函数源中的嵌套单引号。

你应该为函数的主体使用“美元引用”,这会让事情变得更容易:

create function g3_brisi(varchar) 
   returns void as 
$body$
  delete from prezimena
  where prezime between $1 and 'Z';
$body$
language sql;

有关详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING