gpt4 book ai didi

postgresql - '$$' 在 PL/pgSQL 中有什么用

转载 作者:行者123 更新时间:2023-11-29 11:04:57 25 4
gpt4 key购买 nike

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

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

对了,最后一行是什么意思?

最佳答案

这些美元符号 ($$) 用于 dollar quoting ,它绝不特定于函数定义。它可用于替换 SQL 脚本中任何位置包含字符串文字(常量)的单引号。

函数体恰好就是这样一个字符串字面量。 Dollar-quoting 是 PostgreSQL 特定的单引号替代品,以避免转义嵌套的单引号(递归)。您也可以将函数体用单引号引起来。但是你必须转义正文中的所有单引号:

CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
<b>'</b>
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
<b>'</b>;

这不是一个好主意。改用美元报价。更具体地说,还在 $$ 之间放置一个标记,使每一对都是唯一的——您可能想在函数体内使用嵌套的美元引号。实际上,我经常这样做。

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

参见:

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

关于postgresql - '$$' 在 PL/pgSQL 中有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com