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将数据加载到buffer cache中操作方法
Apr 16 PostgreSQL
postgresql无序uuid性能测试及对数据库的影响
Jun 11 PostgreSQL
postgres之jsonb属性的使用操作
Jun 23 PostgreSQL
浅谈PostgreSQL表分区的三种方式
Jun 29 PostgreSQL
postgresql使用filter进行多维度聚合的解决方法
Jul 16 PostgreSQL
PostgreSQL解析URL的方法
Aug 02 PostgreSQL
postgresql 删除重复数据案例详解
Aug 02 PostgreSQL
PostgreSQL并行计算算法及参数强制并行度设置方法
Apr 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
咖啡的植物学知识
2021/03/03 咖啡文化
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
php 设计模式之 单例模式
2008/12/19 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
开启PHP的伪静态模式
2015/12/31 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
Python编程中的文件操作攻略
2015/10/16 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
python实现飞机大战小游戏
2019/11/08 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
网络工程师专家职业发展路线
2014/02/14 职场文书
2014年药房工作总结
2014/11/22 职场文书
idea下配置tomcat避坑详解
2022/04/12 Servers
Python获取字典中某个key的value
2022/04/13 Python