PostgreSQL 教程: PL/pgSQL 常量

八月 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 常量。