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通过oracle_fdw访问Oracle数据的实现步骤
May 21 PostgreSQL
postgresql无序uuid性能测试及对数据库的影响
Jun 11 PostgreSQL
基于PostgreSQL/openGauss 的分布式数据库解决方案
Dec 06 PostgreSQL
PostgreSQL13基于流复制搭建后备服务器的方法
Jan 18 PostgreSQL
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 PostgreSQL
PostgreSQL数据库创建并使用视图以及子查询
Apr 11 PostgreSQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
Apr 12 PostgreSQL
PostgreSQL聚合函数介绍以及分组和排序
Apr 12 PostgreSQL
PostgreSQL基于pgrouting的路径规划处理方法
Apr 18 PostgreSQL
PostgreSQL怎么创建分区表详解
Jun 25 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
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
javascript 禁止复制网页
2009/06/11 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
python实现红包裂变算法
2016/02/16 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python同步两个文件夹下的内容
2019/08/29 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
客服专员岗位职责范本
2013/11/29 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
装修活动策划方案
2014/08/27 职场文书
三潭印月的导游词
2015/02/12 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书