PostgreSQL存储过程实用脚本(二):创建函数入门


Posted in PostgreSQL onApril 05, 2021

准备工作——创建用户数据库和模式:

        在数据库中新建用来学习的数据库mydb,并在mydb数据库中新增mysc,即my database和my schema的缩写,接下来的示例脚本将在mydb数据库下的mysc模式下创建。脚本如下,

-- 1.创建自己的数据库
CREATE DATABASE mydb
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    LC_COLLATE = 'C'
    LC_CTYPE = 'C'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1;
-- 添加备注
COMMENT ON DATABASE mydb
    IS 'my administrative connection database';


-- 2.创建自己的schema
CREATE SCHEMA mysc
   AUTHORIZATION postgres;
-- 添加备注
COMMENT ON SCHEMA mysc
    IS 'my schema';
-- 授权
GRANT ALL ON SCHEMA mysc TO postgres;

创建简单自定义函数示例:

        pl/sql语法比较灵活,但在创建函数时还是要尽量符合语言约定的规范写法,比如参数名称使用可读性较好的写法(驼峰式、短横线式等写法),在示例脚本中尽量使用符合约定的写法。

  • 创建加法计算函数:

创建一个实现两数相加的自定义函数,具体脚本如下,

p_a:计算参数1
p_b:计算参数2
p_sum:返回结果变量
-------------------
CREATE OR REPLACE FUNCTION mydb.mysc.add(IN p_a integer,IN p_b integer,OUT p_sum integer)
    AS 
	$BODY$ 
		BEGIN
			p_sum:= p_a + p_b;  -- 进行加法运算,并将计算结果赋值给输出的参数p_sum
		END;
	$BODY$ 
    LANGUAGE 'plpgsql'			-- 指定函数的程序语言
    VOLATILE					-- 优化器不进行优化
    RETURNS NULL ON NULL INPUT; -- 当传入参数含有null时返回null

调用定义的加法函数输出结果为:

PostgreSQL存储过程实用脚本(二):创建函数入门

  • 创建通用计算函数:

在加法计算函数的基础上进行扩展,实现加减乘除运算的函数,脚本如下,

p_a:计算参数1
p_b:计算参数2
p_operate:要进行的加减乘除操作
p_result:返回结果变量
-------------------
CREATE OR REPLACE FUNCTION mydb.mysc.calc(IN p_a integer,IN p_b integer,IN p_operate char,OUT p_result decimal(16,2))
    AS 
	$BODY$ 
			declare tmp_sql varchar(100);  -- 定义变量

		BEGIN
			tmp_sql:= 'select ('||p_a||'*1.0)'|| p_operate ||'('||p_b||'*1.0)';  -- 拼接要执行的函数
			execute tmp_sql into p_result; -- 将查询结果赋值给p_result
		END;
	$BODY$ 
    LANGUAGE 'plpgsql'			-- 指定函数的程序语言
    VOLATILE					-- 优化器不进行优化
   RETURNS NULL ON NULL INPUT; -- 当传入参数含有null时返回null

调用函数两数相加:

PostgreSQL存储过程实用脚本(二):创建函数入门

调用函数两数相减:

PostgreSQL存储过程实用脚本(二):创建函数入门

调用函数两数相乘:

PostgreSQL存储过程实用脚本(二):创建函数入门

调用函数两数相除:

PostgreSQL存储过程实用脚本(二):创建函数入门

PostgreSQL 相关文章推荐
PostgreSQL存储过程实用脚本(二):创建函数入门
Apr 05 PostgreSQL
如何使用PostgreSQL进行中文全文检索
May 27 PostgreSQL
postgres之jsonb属性的使用操作
Jun 23 PostgreSQL
通过Qt连接OpenGauss数据库的详细教程
Jun 23 PostgreSQL
PostgreSQL解析URL的方法
Aug 02 PostgreSQL
PostgreSQL13基于流复制搭建后备服务器的方法
Jan 18 PostgreSQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
Apr 12 PostgreSQL
PostgreSQL之连接失败的问题及解决
May 08 PostgreSQL
postgresql之greenplum字符串去重拼接方式
May 08 PostgreSQL
PostgreSQL将数据加载到buffer cache中操作方法
Apr 16 #PostgreSQL
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
Centos环境下Postgresql 安装配置及环境变量配置技巧
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
如何使用PostgreSQL进行中文全文检索
May 27 #PostgreSQL
postgresql无序uuid性能测试及对数据库的影响
Jun 11 #PostgreSQL
postgres之jsonb属性的使用操作
Jun 23 #PostgreSQL
You might like
php中一个有意思的日期逻辑处理
2012/03/25 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
javascript闭包入门示例
2014/04/30 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
详解Python如何生成词云的方法
2018/06/01 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
美德好少年主要事迹
2014/01/29 职场文书
初中语文教学反思
2014/02/02 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
小学敬老月活动方案
2014/02/11 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
乌镇导游词
2015/02/02 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
Python+pyaudio实现音频控制示例详解
2022/07/23 Python