暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL特性矩阵解析系列6之Dollar Quoting

1040

简介

    Dollar Quoting($)用于指定字符串常量的标准语法,但是当字符串中包含了很多单引号或反斜线时,因为每一个都需要被双写。要在这种情形下允许可读性更好的查询,PG提供了另一种被称为“美元引用$)”的方式来书写字符串常量。一个美元引用的字符串常量由一个美元符号($)、一个可选的另个或更多字符的“标签”、另一个美元符号、一个构成字符串内容的任意字符序列、一个美元符号、开始这个美元引用的相同标签和一个美元符号组成。

例如,这里有两种不同的方法使用美元引用指定字符串“Dianne's horse”:

    $$Dianne's horse$$
    $SomeTag$Dianne's horse$SomeTag$
    复制

    Dollar Quoting($)实战

      AS 后面是函数的代码部分。
      $$ 实际代码的开始,当遇到下一个 $$ 的时候,为代码的结束
      最后就是  LANGUAGE plpgsql;

      postgres=# CREATE OR REPLACE FUNCTION HelloWorld4() RETURNS varchar AS
      postgres-# $$
      postgres$# BEGIN
      postgres$# RETURN 'Hello World!';
      postgres$# END;
      postgres$# $$
      postgres-# LANGUAGE plpgsql;
      CREATE FUNCTION
      复制
        美元符号并不特定于函数定义。它几乎可以用于替换SQL脚本中的任何位置的单引号。
        函数体恰好是一个字符串,必须用单引号括起来。美元引用是PostgreSQL特定的单引号替代,以避免在函数体内引用问题。

        CREATE OR REPLACE FUNCTION test123(text)
        RETURNS boolean
        AS
        $func$
        BEGIN
        ...
        END
        $func$ LANGUAGE plpgsql STRICT IMMUTABLE;
        复制
          $$是一个分隔符,用于指示函数定义的开始和结束位置。
          create function语法类似,但是因为你要在你的函数中使用各种SQL(特别是语句的结尾;字符),如果你没有分隔它,解析器就会跳转。
          CREATE OR REPLACE FUNCTION check_phone_number(text)
          RETURNS boolean AS <code delimited by $$> LANGUAGE plpgsql STRICT IMMUTABLE;
          复制
            postgres=# select count(*) from pg_class where relkind=$$v$$;
            count
            -------
            125
            (1 row)

            postgres=# select count(*) from pg_class where relkind='v';
            count
            -------
            125
            (1 row)
            复制

              跟随在一个美元符号($)后面的数字被用来表示在一个函数定义或一个预备语句中的位置参数。
              在其他上下文中该美元符号可以作为一个标识符或者一个美元引用字符串常量的一部分。
              select count(*) from pg_class where relkind=$test$t$tabc$;
              复制

              参考

              https://www.postgresql.org/about/featurematrix/#backend

              https://www.postgresql.org/docs/current/sql-syntax-lexical.html

              文章转载自CP的PostgreSQL厨房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论