PostgreSQL – 美元引用的字符串常量
在 PostgreSQL 中,美元引用的字符串常量 ( $$ ) 用于用户定义的函数和存储过程。
在 PostgreSQL 中,您对字符串常量使用单引号,如下所示:
select 'String constant';
当字符串常量包含单引号 ( ' ) 时,您需要通过将单引号加倍来转义它。例如:
select 'I''m also a string constant';
如果你使用旧版本的 PostgreSQL,你可以在字符串常量前面加上E来声明后缀转义字符串语法,并使用反斜杠\来转义单引号,如下所示:
select E'I\'m also a string constant';
如果字符串常量包含反斜杠,则需要使用另一个反斜杠对其进行转义。当字符串常量包含许多单引号和反斜杠时,就会出现问题。将每个单引号和反斜杠加倍会使字符串常量更难以阅读和维护。 PostgreSQL 8.0 版引入了美元引用功能,使字符串常量更具可读性。
下面显示了用美元引用的字符串常量的语法:
Syntax: $tag$$tag$
在此语法中,标记是可选的。它可能包含零个或多个字符。在 $tag$ 之间,您可以放置任何带有单引号 (') 和反斜杠 (\) 的字符串。例如:
select $$I'm a string constant that contains a backslash \$$;
在这个例子中,我们没有在两个美元符号 ($) 之间指定标签。以下示例使用带标记的美元引号字符串常量语法:
SELECT $message$I'm a string constant that contains a backslash \$message$;
在此示例中,我们使用字符串message作为两个美元符号 ( $ )之间的标记。
例子:
为了演示美元引用常量的使用,让我们创建一个函数,通过film_count ()函数返回示例数据库中电影的总数,即dvdrental ,如下所示:
do
$$
declare
film_count integer;
begin
select count(*) into film_count
from film;
raise notice 'The number of films: %', film_count;
end;
$$;
输出:
示例 2:
以下函数通过其 id 查找电影:
create function find_film_by_id(
id int
) returns film
language sql
as
$$
select * from film
where film_id = id;
$$;
现在使用以下语句调用该函数:
SELECT find_film_by_id(3);
输出: