作为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
了解你的例子的最后一行。