PostgreSQL的PL/pgSQL块结构
使用过Oracle
的语句块的都熟悉,在不用创建存储过程或函数就可以执行PLSQL
数据库脚本,这样做通常可以用来做一些复杂业务数据初始化的功能。那么在PostgreSQL
中也有相应的功能,称为PL/pgSQL
,具体语法如下:
[ <<label>> ]
[ DECLARE
declarations ]
BEGIN
statements
END [ label ];
- 语句块由两部分组成:声明部分与主体部分,声明部分是可选的,主体部分是必须的,在主体部分最后的
END
使用;
结尾。 - 块有个可选标签
label
,如果使用了label
那么在END
结尾也必须跟label
标签。 - 主体部分为具体的编码部分,每条语句都要已
;
结尾。
在PostgreSQL
中如果不想创建函数或存储过程,就想执行语句块,可以使用匿名函数,如下:
do $$
begin
raise notice '无Label标签与声明部分';
end $$;
或者
do $$
<<test>>
begin
raise notice '使用label标签';
end test $$;
或者
do $$
<<test>>
declare
i int:=1;
begin
i := i+1;
raise notice '使用label标签,声明i变量,i=%',i;
end test $$;
上面例子给出了三种写法,输出结果如下:
无Label标签与声明部分
使用label标签
使用label标签,声明i变量,i=2
从上面的案例可以看到declare
声明了一个int
类型的i
简单变量,PL/pgSQL
变量可以使用任意的SQL
数据类型,比如integer
、varchar
、char
等等。比如:
--声明字符串类型变量
name varchar(30);
--声明复合数据类型
user_info user%rowtype;
--拷贝字段的类型
user_id user.id%type;
--声明记录类型
user_list record;
变量声明语法:
name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
如果想在声明变量的时候就需要给默认值,写法如下:
num int:=0;
对于简单的变量声明就不做演示,下面演示下符合数据类型及记录类型的使用,复合数据类型一般用于将整条数据存储到变量里面;记录类型则是记录多条数据,通常配合for
循环使用;
do $$
<<test>>
declare
t_o t_order%rowtype;
t_o_list record;
begin
select * into t_o from t_order t where t.id = 5;
raise notice '客户:%,订单编码:%',t_o.cus_name,t_o.order_code;
for t_o_list in (select * from t_order) loop
raise notice '客户:%,订单编码:%',t_o_list.cus_name,t_o_list.order_code;
end loop;
end test $$;
分类:
PostgreSQL
标签:
PostgreSQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义