PostgreSQL存储过程(三):使用匿名代码块

news/2024/7/9 20:00:50 标签: postgresql, 数据库, database

匿名代码块介绍:

 

        匿名代码块是在PostgreSQL 9.X版本引入的新功能【注:9.0以下不支持,可通过select version()脚本确认自己使用的数据库版本】,通过DO关键字指定执行代码块,其功能和函数类似,相当于轻量版的函数,但不能传参数和返回值。适合进行一些较为复杂的一次性查询,在日常中使用可以大大降低一些重复脚本执行的人力成本。

准备工作——创建数据表:

        在开始使用匿名代码块之前,首先创建一张要操作的数据表作为函数中的操作对象。

create table mydb.mysc.learn01(
statistics_dt 	date			-- 数据日期
,cust_id 		varchar(20)		-- 客户号
,cust_name 		varchar(20)		-- 客户名称
,aum_avg 		decimal(16,2)	-- 资产月日均
,age 			int				-- 年龄
,gender 		varchar(1)		-- 性别标志:0男 1女
,PRIMARY KEY(statistics_dt,cust_id)
);-- DISTRIBUTED BY 语句适用于分布式部署的系统,单机版不支持

-- 赋权
ALTER TABLE mydb.mysc.learn01
    OWNER to postgres;
-- 添加备注信息
comment on table mydb.mysc.learn01 is 'postgresql技能提升学习表01';
comment on column mydb.mysc.learn01.statistics_dt is '数据日期';
comment on column mydb.mysc.learn01.cust_id is '客户号';
comment on column mydb.mysc.learn01.cust_name is '客户名称';
comment on column mydb.mysc.learn01.aum_avg is '资产月日均';
comment on column mydb.mysc.learn01.age is '年龄';
comment on column mydb.mysc.learn01.gender is '性别标志:0男 1女';

使用匿名函数——插入一千条数据:

        在以下脚本中通过一定的规则和随机数实现插入1000天记录的任务。

DO LANGUAGE 'plpgsql'  -- 指定匿名块的语言,可省略默认为plpgsql
$BODY$ 
BEGIN
	FOR counter IN 1..1000 LOOP   -- 开始循环
		INSERT INTO mydb.mysc.learn01
			(statistics_dt -- 数据日期
			,cust_id 	   -- 客户号
			,cust_name 	   -- 客户名称
			,aum_avg 	   -- 资产月日均
			,age 		   -- 年龄
			,gender        -- 性别标志:0男 1女
			)
		VALUES(
			date'2021-01-31'                             -- 数据日期
			,RIGHT('000'||counter,4)                     -- 客户号
			,'编号'||RIGHT('000'||counter,4)              -- 客户名称
			,CAST(RANDOM() * 10000  AS decimal(16,2))    -- 资产月日均:随机生成0-10000的数值
			,CAST(RANDOM() * 89  AS INT) + 1             -- 年龄:随机生成1-90的整数
			,CAST(CAST(RANDOM() * 2  AS INT)%2 AS CHAR)  -- 性别:随机生成
		);
	END LOOP;
END  
$BODY$;

在上述匿名函数执行结束后,查询验证数据,已经成功完成数据的插入,如图,


http://www.niftyadmin.cn/n/896545.html

相关文章

Attempt to invoke virtual method ‘android.content.res.XmlResourceParser android.content.pm.ProviderI

android的报错提示: java.lang.NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)’ on a null object reference …

vba ado返回集合_VBA中地址Address的含义,

大家好,今日继续和大家分享VBA编程中常用的常用"积木"过程代码。这些内容大多是我的经验和记录,来源于我多年的经验。今日分享的是NO.227-NO.228,内容是:NO. 227:在工作表的SelectionChange事件中当返回的区…

PostgreSQL存储过程(四):追加指定日期区间数据

需求介绍: 本次的目标是实现追加指定区间内的历史数据,且仅保存指定日期区间内月份月末一天的数据的函数。在文章三中介绍了方便一次性使用的匿名代码块,但匿名代码块对脚本的封装能力有限,本次使用普通的函数进行实现。【注&…

python老牌语言_编程语言世界杯,Python击败老牌劲旅Java夺冠

本文1346字,阅读大概需要 4 分钟。世界杯激战正酣,克罗地亚突围成功,与年轻的法国队会师决赛。周日晚北京时间23:00将会决出本届世界杯的冠军。谁将会捧起大力神杯?我们拭目以待!买定离手!于此同时&#xf…

PostgreSQL存储过程(五):函数返回值

返回值介绍: PostgreSQL函数提供了OUT关键字和RETURNS两种语法来实现返回值的定义,其中RETURNS关键字需要在函数体中使用RETURN关键字指明返回的变量,示例脚本如下: 1. 通过OUT关键字指定返回值 ------------------- CREATE OR R…

string 赋值给数组_【Java从入门到进阶】深入学习 Java数组

这是为小白定制的专属《Java从入门到进阶》系列。涵盖了JavaSE的所有知识点,内容由浅入深,配合案例快速上手。目标就是帮助小白或者准备面试的小伙伴以最快的速度熟悉Java语法,少走弯路!1、数组定义Java中数组的定义有三种方式&am…

python递归实现二叉树_python3实现二叉树的遍历与递归算法解析(小结)

1、二叉树的三种遍历方式二叉树有三种遍历方式:先序遍历,中序遍历,后续遍历 即:先中后指的是访问根节点的顺序 eg:先序 根左右 中序 左根右 后序 左右根遍历总体思路:将树分成最小的子树,然后按照顺序输出1…

PostgreSQL存储过程(六):结构控制和循环

结构控制和循环介绍: 作为编程语言中极为重要的知识,控制和循环可以降低代码量和减少人的工作量。在PL/PGSQL中实现了常用的控制结构和循环方法,灵活使用确实可以用来提高数据库查询的效率。 结构控制: 1. 结构:IF .…