微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – ‘$$’在PL/pgSQL中使用什么

作为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布尔AS $$,$$是一个占位符。

最后一行有点神秘:$$ LANGUAGE plpgsql STRICT IMMUTABLE;

顺便问一下,最后一行是什么意思?

美元符号用于 dollar quoting,并且没有特定于函数定义。它可用于替换sql脚本中几乎任何位置的单引号。

函数的正文恰好是一个字符串文字,必须用单引号括起来。美元引用是一个Postgresql特定的单引号替换,以避免引用函数体内的问题。你可以用单引号写出你的函数定义。但是,你必须逃避所有单引号的身体:

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 ''Malformed string "%". Expected format is +999 999'';
  END IF;
  RETURN true; 
END
' LANGUAGE plpgsql STRICT IMMUTABLE;

这不是一个好主意。换句话说,使用美元引用,更具体地说,在$$之间放置一个令牌以使其唯一 – 你可能想在函数体中使用$ -quotes。我做了很多,实际上。

CREATE OR REPLACE FUNCTION check_phone_number(text)
  RETURNS boolean  
AS
$func$
BEGIN
 ...
END
$func$  LANGUAGE plpgsql STRICT IMMUTABLE;

细节:

> Insert text with single quotes in PostgreSQL

至于你的第二个问题:
阅读最优秀的manual on CREATE FUNCTION了解你的例子的最后一行。

原文地址:https://www.jb51.cc/postgresql/193504.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐