以美元符号作为引号的字符串常量

191
2023/08/01 15:00:50

本章将讨论如何在 PL/pgSQL 编程中使用以美元符号作为引号的字符串常量。

背景

SELECT '你好,世界';

当字符串本身包含单引号时,需要进行转义:

SELECT '他说:''你好,世界''。';

为了减少转义,让字符串常量更具可读性,PostgreSQL 加入了使用以美元符号作为引号的语法。

以美元符号作为引号

语法:

$tag$<字符串常量>$tag$
  • tag:可选,可以是零个或多个字符串
  • 字符串常量:可以放置任何字符,包括单引号、反斜杠等
SELECT $dir$目录:c:\'Program Files'\Google$dir$;

此例中,我们设置 tagdir

为简化描述,我们将”以美元符号作为引号“简称为”美元引号“或者”DQ“

在匿名块中使用美元引号

do 
'declare
   film_count integer;
begin 
   select count(*) into film_count
   from film;
   raise notice ''The number of films: %'', film_count;
end;';
  • 你可以在后续章节了解匿名块。你可以把以上代码复制到 psqldbeaver 中执行

  • 块中的代码必须用单引号括起来。如果代码内部也有单引号,必须进行转义:

    raise notice ''The number of films: %'', film_count;
    

为了避免频繁的转义带来复杂度和出错概率,我们使用美元引号来代替:

do 
$$
declare
   film_count integer;
begin 
   select count(*) into film_count
   from film;
   raise notice 'The number of films: %', film_count;
end;
$$