作为PL/pgSQL的全新成员,this function中的双美元符号是什么意思:
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean AS $$
BEGIN
IF NOT $1 ~ e'^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$' THEN
RAISE EXCEPTION 'Wrong formated string "%". Expected format is +999 999';
END IF;
RETURN true;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
字符串
我猜,在RETURNS boolean AS $$
中,$$
是一个占位符。
最后一行有点神秘:$$ LANGUAGE plpgsql STRICT IMMUTABLE;
个
顺便问一下,最后一行是什么意思?
2条答案
按热度按时间mklgxw1f1#
这些美元符号(
$$
)用于美元引号,这决不是特定于函数定义的。它可用于替换SQL脚本中任何位置的用单引号括住的字符串文字(常量)。函数体恰好是这样的字符串文字。美元引号是PostgreSQL特定的单引号替代,以避免嵌套单引号的转义(递归)。您也可以用单引号将函数体括起来。但是,您必须对所有嵌套的单引号进行转义:
字符串
(添加了
RAISE
的缺失参数,顺便说一句。)这可不是个好主意请改用美元报价。更具体地说,还要在
$$
中放置一个(有意义的)标记,以避免与函数体中的嵌套引号混淆。实际上是个普通的案子。型
请参阅:
第二个问题:
阅读最优秀的manual on
CREATE FUNCTION
以理解示例的最后一行。“qco9c6ql2#
$$
是一个定界符,用于指示函数定义的开始和结束位置。考虑以下情况,字符串
create函数的语法是类似的,但是因为你要在你的函数中使用所有类型的SQL(特别是语句结束的
;
字符),如果你不对它进行定界,解析器就会出错。所以你应该把你的陈述读成:型
实际定义之后的内容是选项,用于向数据库给予有关函数的更多信息,以便优化其使用。
事实上,如果你看“4.1.2.4.在手册中,你会看到你甚至可以在美元符号之间使用字符,它们都将被视为一个分隔符。