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将数据加载到buffer cache中操作方法
Apr 16 PostgreSQL
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
Apr 22 PostgreSQL
如何使用PostgreSQL进行中文全文检索
May 27 PostgreSQL
postgres之jsonb属性的使用操作
Jun 23 PostgreSQL
关于PostgreSQL JSONB的匹配和交集问题
Sep 14 PostgreSQL
基于PostgreSQL/openGauss 的分布式数据库解决方案
Dec 06 PostgreSQL
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
Jan 18 PostgreSQL
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 PostgreSQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
Apr 12 PostgreSQL
postgreSQL数据库基础知识介绍
Apr 12 PostgreSQL
PostgreSQL怎么创建分区表详解
Jun 25 PostgreSQL
PostgreSQL常用字符串分割函数整理汇总
Jul 07 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
基于文本的搜索
2006/10/09 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
简单的js分页脚本
2009/05/21 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
Python 占位符的使用方法详解
2019/07/10 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
成龙洗发水广告词
2014/03/14 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
初三学习计划书范文
2014/04/30 职场文书
销售提升方案
2014/06/07 职场文书
律师授权委托书范本
2014/10/07 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫