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无序uuid性能测试及对数据库的影响
Jun 11 PostgreSQL
PostgreSQL解析URL的方法
Aug 02 PostgreSQL
关于PostgreSQL JSONB的匹配和交集问题
Sep 14 PostgreSQL
Oracle配置dblink访问PostgreSQL的操作方法
Mar 21 PostgreSQL
PostgreSQL事务回卷实战案例详析
Mar 25 PostgreSQL
PostgreSQL并行计算算法及参数强制并行度设置方法
Apr 07 PostgreSQL
PostgreSQL逻辑复制解密原理解析
Sep 23 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代码
2008/04/09 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
JS实现碰撞检测的方法分析
2018/01/19 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
Python实现去除代码前行号的方法
2015/03/10 Python
python实现杨辉三角思路
2017/07/14 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python交易记录链的实现过程详解
2019/07/03 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
如何理解Python中的变量
2020/06/01 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
婚前财产公证书
2014/04/10 职场文书
医药销售自荐书
2014/05/29 职场文书
生日宴会策划方案
2014/06/03 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
青春雷锋观后感
2015/06/10 职场文书
Python实现制作销售数据可视化看板详解
2021/11/27 Python
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
排查Tomcat进程假死的问题
2022/05/06 Servers
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS