八月 22, 2023
摘要:在本教程中,您将了解其值无法更改的 PL/pgSQL 常量。
目录
PL/pgSQL 常量简介
与变量不同,常量的值一旦初始化就无法更改。
以下是使用常量的原因。
首先,常量使代码更具可读性和可维护性,例如,假设您有以下公式:
selling_price := net_price + net_price * 0.1;
0.1
是什么意思?它可以被解释为任何东西。
但当你使用下面的公式时,大家都知道等于净价加增值税(VAT)的销售价格的计算含义。
selling_price := net_price + net_price * vat;
其次,常量减少了维护工作。
假设您在一个函数中各处都用到了一个公式可以计算售价。当增值税发生变化(例如从 0.1 变为 0.5)时,您需要更改所有这些硬编码值。
通过使用常量,您只需在定义该常量的一处更改其值。
那么如何在 PL/pgSQL 中定义常量呢?
定义常量
要在 PL/pgSQL 中定义常量,可以使用以下语法:
constant_name constant data_type := expression;
在这个语法中:
- 首先,指定常量的名称。名称应尽可能具有描述性。
- 其次,在名称后面添加
constant
关键字并指定常量的数据类型。 - 第三,在赋值运算符 (
:=
) 之后初始化常量的值。
PL/pgSQL 常量示例
以下示例声明一个常量vat
用于存储增值税,并根据净价计算售价:
do $$
declare
vat constant numeric := 0.1;
net_price numeric := 20.5;
begin
raise notice 'The selling price is %', net_price * ( 1 + vat );
end $$;
NOTICE: The selling price is 22.55
现在,如果您尝试按如下方式更改常量的值:
do $$
declare
vat constant numeric := 0.1;
net_price numeric := 20.5;
begin
raise notice 'The selling price is %', net_price * ( 1 + vat);
vat := 0.05;
end $$;
您将收到以下错误消息:
ERROR: "vat" is declared CONSTANT
SQL state: 22005
Character: 155
与变量的默认值类似,PostgreSQL 在运行时而不是编译时,进入代码块时计算常量的值。例如:
do $$
declare
start_at constant time := now();
begin
raise notice Start executing block at %', start_at;
end $$;
NOTICE: Start executing block at 17:49:59.791
PostgreSQL 在每次调用该代码块时都会计算now()
函数。要查看其效果,您可以重复执行该块:
NOTICE: Start executing block at 17:50:44.956
在本教程中,您学习了如何声明和使用 PL/pgSQL 常量。