使用DO,CREATE FUNCTION等时,$$是什么意思?

时间:2019-07-23 17:25:03

标签: sql postgresql dollar-quoting

我已经看到在FUNCTION声明中以及在执行声明语句时经常使用双美元符号($$)。我承认它可能是一些与语法相关的功能,但是我不太清楚如何/为什么使用它以及何时使用它。

下面的用法代码示例:

CREATE OR REPLACE FUNCTION BuildFunction(IN prefix TEXT, IN func_id INTEGER) RETURNS BOOLEAN AS $$
BEGIN
...
END; $$

混乱点,如何将布尔值作为$$返回,它是某种特殊类型还是某种东西?

DO $$
DECLARE  
   a integer := 10;  
   b integer := 20;  
   c integer;  
BEGIN  
   c := a + b;
    RAISE NOTICE'Value of c: %', c;
END $$;

此代码段来自How do you use variables in a simple PostgreSQL script?

1 个答案:

答案 0 :(得分:1)

来自fine manual

  

4.1.2.4。美元报价的字符串常量

     

尽管通常使用指定字符串常量的标准语法很方便,但是当所需的字符串包含许多单引号或反斜杠时,可能很难理解,因为每个引号或反斜杠必须加倍。为了在这种情况下允许更具可读性的查询,PostgreSQL提供了另一种称为“美元引号”的方式来编写字符串常量。以美元报价的字符串常量包含一个美元符号($),一个零个或多个字符的可选“标记”,另一个美元符号,构成字符串内容的任意字符序列,一个美元符号以及与之相同的标记开始用这美元报价和一个美元符号。

美元报价是一种特定于PostgreSQL的字符串报价方式,其中将包含许多内部单引号,而不会强迫您转义引号并造成不可读的混乱。因此,这些是等效的字符串文字:

'R''hllor'
$$R'hllor$$

美元引号不是特定于函数的,您可以将其用于任何字符串文字,但是在函数定义中最常见,如您的两个示例一样。