提问人:Febraiz 提问时间:11/30/2022 更新时间:12/1/2022 访问量:34
调用存储函数时如何处理撇号?
How to deal with apostrophes when calling a stored function?
问:
我有一个非常直截了当的问题,关于一些由于某种原因让我烦恼的事情。
假设我们有这个 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);"
感谢您的任何帮助
答:
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
下一个:SQL 选择与撇号相同
评论