调用存储函数时如何处理撇号?

How to deal with apostrophes when calling a stored function?

提问人:Febraiz 提问时间:11/30/2022 更新时间:12/1/2022 访问量:34

问:

我有一个非常直截了当的问题,关于一些由于某种原因让我烦恼的事情。

假设我们有这个 PL/SQL 函数:

CREATE OR REPLACE FUNCTION gettextfromtitle(title text) RETURNS SETOF record
    LANGUAGE plpgsql
    AS $$
DECLARE

##############

END
$$;

这个函数的重点是让任何变量(这里称为标题)通过它。

如果我尝试在终端上调用这个函数:

psql -h ### -X -U ### -d ### -t -c "select text from gettextfromtitle('I type anything') AS (text varchar);"

它会起作用的。

如果我尝试在具有相同文本但带有撇号的终端上调用此函数,它将中断:

psql -h ### -X -U ### -d ### -t -c "select text from functionName('I t'ype anything') AS (text varchar);"

即使我在函数中使用 quote_literral() 处理撇号,它也会在函数调用时中断。

有什么方法可以防止这种情况发生吗?或者唯一的解决方案是进行初步处理,将任何单个引号更改为 2xsingle 引号?

psql -h ### -X -U ### -d ### -t -c "select text from functionName('I t''ype anything') AS (text varchar);"

感谢您的任何帮助

sql 字符串 postgresql 引用撇

评论


答:

2赞 Laurenz Albe 12/1/2022 #1

使用美元报价

psql -h xxx -X -U xxx -d xxx -t \
    -c "select text from functionName(\$\$I t'ype anything\$\$) AS (text varchar)"

由于我们使用双引号,因此必须使用反斜杠进行转义。$

评论

0赞 Febraiz 12/1/2022
哦,天哪,非常感谢你,我不知道我们可以在调用函数时使用它!谢谢 YOUUUUUUUUUUUUUUUU