无法在 PostgreSQL 中使用字符串作为函数参数。

12 浏览
0 Comments

无法在 PostgreSQL 中使用字符串作为函数参数。

这个问题已经在这里有了答案:

在PostgreSQL中插入带单引号的文本

Postgres dblink转义单引号

PostgreSQL:如何转义数据库触发器中的单引号?

在PostgreSQL中转义所有单引号

我在PostgreSQL函数中遇到了一些问题。

我的表名是people,名字是text类型的,年份是整数类型的。

我想写一个像这样的函数:

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)
...

有人能帮帮我吗?

谢谢。

admin 更改状态以发布 2023年5月23日
0
0 Comments

我有答案:

使用''danilo'',将'加倍

通过将其加倍来转义单引号''

create function add() returns void as '
insert into people(name, year) VALUES (''danilo'', 12)
' LANGUAGE SQL;

0
0 Comments

你的案例是一个很好的例子,为什么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;

0