以美元符号作为引号的字符串常量
本章将讨论如何在 PL/pgSQL 编程中使用以美元符号作为引号的字符串常量。块结构
本章将讨论 PL/pgSQL 的块结构,同时也会带你编写第一个 PL/pgSQL 程序。变量
本章将学习 PL/pgSQL 变量的相关知识。行类型
本章将讨论 PL/pgSQL 的行类型。将一个变量声明为行类型之后,它便可以保存数据库中的整行数据。记录类型
本章我们讨论 PostgreSQL 的记录类型,它和行类型相似,也可以存储数据库中的整行信息。常量
本章将讨论 PL/pgSQL 常量。错误和异常处理
本章我们将讨论 PL/pgSQL 的错误和异常处理。控制结构
本章将讨论 PL/pgSQL 的控制结构,包括:IF、CASE、LOOP、WHILE LOOP、FOR LOOP、EXIT和CONTINUE等语句。函数
本章我们将讨论自定义函数的相关知识,包括:创建函数、函数参数的模式、函数重载、返回表的函数以及删除函数等知识。存储过程
本章我们将讨论存储过程。游标
本章我们将讨论 PL/pgSQL 的游标以及如何使用它们逐行处理结果集。触发器
本章将讨论触发器,包括:创建、删除、更新、禁用、启用触发器等知识。
变量
- 310
- 2023-08-01 07:46:34
本章将学习 PL/pgSQL 变量的相关知识。
简介
变量是指向内存位置的有意义的名称,它保存的值可以通过块进行修改。变量就是与特定的数据类型关联。
变量名 数据类型 [:= 表达式];
变量名
:指定变量的名称。一个有意义的变量名是非常有必要的。数据类型
:将特定的数据类型与变量相关联[:= 表达式]
:可选的。可以给变量设置初始值。如果省略这部分,变量的初始值是NULL
以下示例说明了如何声明和初始化变量:
do $$
declare
counter integer := 1;
first_name varchar(50) := 'John';
last_name varchar(50) := 'Doe';
payment numeric(11,2) := 20.5;
begin
raise notice '% % % has been paid % USD',
counter,
first_name,
last_name,
payment;
end $$;
counter
变量:是一个初始值为1
的整数first_name
、last_name
:都是数据类型为VARCHAR(50)
变量,它们的初始值分别是John
和Doe
payment
:是一个初始值为20.5
,数据类型为numeric(11,2)
的变量
变量初始化时序
do $$
declare
created_at time := now();
begin
raise notice '%', created_at;
perform pg_sleep(10);
raise notice '%', created_at;
end $$;
/* 结果
NOTICE: 14:23:33.064008
NOTICE: 14:23:33.064008
*/
复制数据类型
%type
可以获取字段或其它变量的数据类型。通常应该使用 %type
来声明指向数据库某字段或另一个变量值的变量。语法如下:
-- 声明具有指定字段数据类型的变量
变量名 表名.字段名%type;
-- 声明具有另一个变量数据类型的变量
变量名 其它变量%type;
以示例数据库的 film
为例:
do $$
declare
film_title film.title%type;
featured_title film_title%type;
begin
-- 获取 ID 为 100 的电影的标题
select title
from film
into film_title
where film_id = 100;
-- 显示电影标题
raise notice 'ID为100的电影的标题是:%s', film_title;
end $$;
此示例声明了两个变量:
film_title
变量:与film
表中的title
字段具有相同的数据类型featured_title
变量:与film_title
变量具有相同的数据类型
使用类型复制功能,将获得以下优势:
do $$
<<outer_block>>
declare
counter integer := 0;
begin
counter := counter + 1;
raise notice 'The current value of the counter is %', counter;
declare
counter integer := 0;
begin
counter := counter + 10;
raise notice 'Counter in the subblock is %', counter;
raise notice 'Counter in the outer block is %', outer_block.counter;
end;
raise notice 'Counter in the outer block is %', counter;
end outer_block $$;
/* 结果
NOTICE: The current value of the counter is 1
NOTICE: Counter in the subblock is 10
NOTICE: Counter in the outer block is 1
NOTICE: Counter in the outer block is 1
*/
使用SELECT INTO
将查询结果赋值给变量
通过 SELECT INTO
语句,可以将查询结果赋值给变量,语法如下:
select select_list
into variable_name
from table_expression;
示例:
do $$
declare
actor_count integer;
begin
-- 统计演员数量,并将结果赋值给actor_count变量
select count(*)
into actor_count
from actor;
-- 显示演员数量
raise notice '共有 % 个演员', actor_count;
end; $$