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

news/2024/7/9 23:23:10 标签: postgresql, 数据库, database

返回值介绍:

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

1. 通过OUT关键字指定返回值
-------------------
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

2. 通过RETURNS关键字指定返回值
-------------------
CREATE OR REPLACE FUNCTION mydb.mysc.add(IN p_a integer,IN p_b integer)
RETURNS integer  
    AS 
	$BODY$ 
		DECLARE p_sum integer;
		BEGIN
			p_sum:= p_a + p_b;  -- 进行加法运算,并将计算结果赋值给输出的参数p_sum
			RETURN p_sum;       -- 需要指明返回的变量
		END;
	$BODY$ 
    LANGUAGE 'plpgsql'			-- 指定函数的程序语言
    VOLATILE					-- 优化器不进行优化
    RETURNS NULL ON NULL INPUT; -- 当传入参数含有null时返回null
	

返回数据库内置数据类型:

        内置数据类型如integer、varchar、date、decimal等可以直接进行返回,脚本同上文的示例。

返回多行数据:

        需要返回多条记录时,需要使用SETOF关键字指明要返回的数据类型,示例代码如下:

1. 返回多列内置数据类型:


CREATE OR REPLACE FUNCTION mydb.mysc.get_all_data() RETURNS SETOF varchar(20) AS
$BODY$
DECLARE
    r varchar(20);
BEGIN
    FOR r IN
        SELECT cust_name FROM mydb.mysc.learn01  WHERE statistics_dt = date'2021-01-31'
    LOOP
        RETURN NEXT r;
    END LOOP;
    RETURN;
END;
$BODY$
LANGUAGE plpgsql;

执行示例:

2. 返回多行多列组合数据类型:

        需要定义返回的数据类型为数据表mydb.mysc.learn01(该表依旧使用文章三中定义的数据表)

CREATE OR REPLACE FUNCTION mydb.mysc.get_all_data1() RETURNS SETOF mydb.mysc.learn01 AS
$BODY$
DECLARE
    r mysc.learn01%rowtype; -- 设置r变量的字段和表learn01一致
BEGIN
    FOR r IN
        SELECT * FROM mydb.mysc.learn01  WHERE statistics_dt = date'2021-01-31'
    LOOP
        RETURN NEXT r; 
    END LOOP;
    RETURN;
END;
$BODY$
LANGUAGE plpgsql;

执行示例:

3. 使用TABLE返回多行多列组合数据类型:

        使用TABLE返回数据和SETOF返回功能基本相同,但TABLE方式返回组合数据类型要更加灵活,可以选择需要返回的字段,示例代码如下

CREATE OR REPLACE FUNCTION mydb.mysc.get_all_data3() 
RETURNS TABLE (cust_id varchar(20),cust_name varchar(20),aum_avg decimal(16,2),age integer,gender varchar(1)) AS
$BODY$
BEGIN
    RETURN QUERY SELECT t0.cust_id,t0.cust_name,t0.aum_avg,t0.age,t0.gender FROM mydb.mysc.learn01 t0 WHERE t0.statistics_dt = date'2021-01-31';
END;
$BODY$
LANGUAGE plpgsql;

执行示例:


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

相关文章

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

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

python递归实现二叉树_python3实现二叉树的遍历与递归算法解析(小结)

1、二叉树的三种遍历方式二叉树有三种遍历方式:先序遍历,中序遍历,后续遍历 即:先中后指的是访问根节点的顺序 eg:先序 根左右 中序 左根右 后序 左右根遍历总体思路:将树分成最小的子树,然后按照顺序输出1…

PostgreSQL存储过程(六):结构控制和循环

结构控制和循环介绍: 作为编程语言中极为重要的知识,控制和循环可以降低代码量和减少人的工作量。在PL/PGSQL中实现了常用的控制结构和循环方法,灵活使用确实可以用来提高数据库查询的效率。 结构控制: 1. 结构:IF .…

Hive SQL进阶案例(一):使用LAG函数判断日期连续性

一、LAG函数介绍 LAG函数是一个常用的窗口函数,作用是取当前行之后的数据,即把该列数据向上错位。使用方法如下: LAG(col ,n ,Default) col是字段名称,指明要操作的列,必须指定该参数; n表示取当前行的后…

Android Spinner下拉框使用

Spinner下拉框效果如下&#xff1a; 1.activity_main.xml&#xff0c;Spinner下拉框 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"…

python oserror errorno 39_python的bug? OSError: [Errno 9] Bad file number

前面发贴问了怎么定义一个全局变量&#xff0c;后来发现不是变量作用范围的问题。运行log:rootPandora # ./TestCase.pyTraceback (most recent call last):File "./TestCase.py", line 44, in TC.setup()File "./TestCase.py", line 31, in setupGWchild.…

python 增量聚类_使用Python的四种机器学习技术

机器学习回归在一些统计书籍中&#xff0c;我们经常会发现回归是衡量一个变量的均值与其他值的对应值之间相互关系的量度。那么让我们讨论一下该如何看待它。回归均值查尔斯达尔文的表兄弟弗朗西斯高尔顿(Francis Galton)观察了几代豌豆的大小。他得出的结论是&#xff0c;自然…

Android Studio 扫描识别二维码(包含闪光灯和本地二维码)、生成二维码、生成带logo的二维码

一、测试如下: 1.扫描识别二维码,扫描结果多少 2.生成二维码、生成带logo的二维码 二、添加依赖: 1.在Project的build.gradle中添加maven { url ‘https://jitpack.io’ } allprojects {repositories {google