不能在postgresql的函数中使用字符串[重复]
Posted
技术标签:
【中文标题】不能在postgresql的函数中使用字符串[重复]【英文标题】:can't use string in function at postgresql [duplicate] 【发布时间】:2018-10-16 16:12:54 【问题描述】:我对 postgresql 函数有一些问题。 我的表名是 people,name 是 text,year 是 integer。
我喜欢写这样的函数:
create function add() returns void as '
insert into people(name, year) VALUES ('danilo', 12)
' LANGUAGE SQL;
我无法插入字符串,例如 danilo。
错误:“danilo”处或附近的语法错误
我试过了
...
insert into people(name, year) VALUES ( \'danilo\', 12)
...
但不起作用。
这很好用:
...insert into people( year) VALUES ( 12)...
还有这个:
create function add(text) returns void as '
insert into people(name, year) VALUES ($1, 12)
' LANGUAGE SQL;
select add('danilo');
但我该怎么做:
...
insert into people(name, year) VALUES ('danilo', 12)
...
谁能帮帮我?
谢谢。
【问题讨论】:
postgresql.org/docs/current/static/… 【参考方案1】:您的案例就是很好的例子,为什么 PostgreSQL 有自定义字符串分隔符 - 符号 $some$
。自定义字符串分隔符应成对使用。
postgres=# select $_$Hello$_$;
?column?
----------
Hello
(1 row)
撇号没有问题
postgres=# select $_$He'llo$_$;
?column?
----------
He'llo
(1 row)
所以你的代码应该看起来像
create function add(text)
returns void as $$
insert into people(name, year) VALUES ('Hello', 12)
$$ LANGUAGE SQL;
【讨论】:
【参考方案2】:我有答案:
使用''danilo'',加倍'
转义单引号 ' 通过将它们加倍 ''
create function add() returns void as '
insert into people(name, year) VALUES (''danilo'', 12)
' LANGUAGE SQL;
【讨论】:
【参考方案3】:你必须用双单引号转义
create function add() returns void as '
insert into people(name, year) VALUES (''danilo'', 12)
' LANGUAGE SQL;
【讨论】:
以上是关于不能在postgresql的函数中使用字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在postgresql中将值提取到逗号分隔的字符串中[重复]