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

前端之家收集整理的这篇文章主要介绍了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了解你的例子的最后一行。

猜你在找的Postgre SQL相关文章