PostgreSQL存储过程(二):创建函数入门

news/2024/7/9 22:35:30 标签: postgresql, 数据库, database

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

        在数据库中新建用来学习的数据库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

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

  • 创建通用计算函数:

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

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
	

调用函数两数相加:

调用函数两数相减:

调用函数两数相乘:

调用函数两数相除:


http://www.niftyadmin.cn/n/896547.html

相关文章

python短视频自动制作_短视频篇 | Python 带你进行短视频二次创作

1目 标 场 景无论是抖音还是快手等视频平台,一旦一个视频火了后,很多 UP 主都会争先抢后去模仿拍摄或剪辑,然后上传到平台,最后都能带来不错的流量。对于一般的短视频,完全可以通过裁剪、特效转场、加入混合图层和字幕…

PostgreSQL存储过程(三):使用匿名代码块

匿名代码块介绍: 匿名代码块是在PostgreSQL 9.X版本引入的新功能【注:9.0以下不支持,可通过select version()脚本确认自己使用的数据库版本】,通过DO关键字指定执行代码块,其功能和函数类似,相当于轻量版的…

Attempt to invoke virtual method ‘android.content.res.XmlResourceParser android.content.pm.ProviderI

android的报错提示: java.lang.NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)’ on a null object reference …

vba ado返回集合_VBA中地址Address的含义,

大家好,今日继续和大家分享VBA编程中常用的常用"积木"过程代码。这些内容大多是我的经验和记录,来源于我多年的经验。今日分享的是NO.227-NO.228,内容是:NO. 227:在工作表的SelectionChange事件中当返回的区…

PostgreSQL存储过程(四):追加指定日期区间数据

需求介绍: 本次的目标是实现追加指定区间内的历史数据,且仅保存指定日期区间内月份月末一天的数据的函数。在文章三中介绍了方便一次性使用的匿名代码块,但匿名代码块对脚本的封装能力有限,本次使用普通的函数进行实现。【注&…

python老牌语言_编程语言世界杯,Python击败老牌劲旅Java夺冠

本文1346字,阅读大概需要 4 分钟。世界杯激战正酣,克罗地亚突围成功,与年轻的法国队会师决赛。周日晚北京时间23:00将会决出本届世界杯的冠军。谁将会捧起大力神杯?我们拭目以待!买定离手!于此同时&#xf…

PostgreSQL存储过程(五):函数返回值

返回值介绍: PostgreSQL函数提供了OUT关键字和RETURNS两种语法来实现返回值的定义,其中RETURNS关键字需要在函数体中使用RETURN关键字指明返回的变量,示例脚本如下: 1. 通过OUT关键字指定返回值 ------------------- CREATE OR R…

string 赋值给数组_【Java从入门到进阶】深入学习 Java数组

这是为小白定制的专属《Java从入门到进阶》系列。涵盖了JavaSE的所有知识点,内容由浅入深,配合案例快速上手。目标就是帮助小白或者准备面试的小伙伴以最快的速度熟悉Java语法,少走弯路!1、数组定义Java中数组的定义有三种方式&am…