达梦数据库创建函数返回值为表记录

发布时间 2023-07-05 16:03:03作者: 德邦总管

第一步:创建记录类型

tb_employ为要返回记录的原始表,%TYPE表示引用指定表指定字段的类型

1 create type record_employ IS record(
2     name tb_employ.name%TYPE,
3     age tb_employ.age%TYPE
4 );

 

第二步:创建表类型

引用第一步创建的记录类型创建表类型

1 create type row_employ AS table OF record_employ;

 

第三步:创建函数

传入参数,执行自定义sql语句,遍历结果集赋值给表类型对象,返回表类型对象

 1 CREATE OR REPLACE FUNCTION "f_employ"("maxvalue" IN VARCHAR2(4),"minvalue" IN VARCHAR2(4))
 2 RETURN row_employ
 3 AUTHID DEFINER
 4 AS
 5   o_rec record_employ;
 6   o_out row_employ:=row_employ();
 7   i NUMBER := 0;
 8 BEGIN
 9   for o_rec in
10     (select
11         i.name,
12         i.age 
13     from tb_employ i
14     WHERE i.age >= minvalue AND i.age <= maxvalue) loop
15   o_out.extend;
16   i := i + 1;
17   o_out(i) := o_rec;
18   end loop;
19   RETURN o_out;
20 END;

 

第四步:调用函数

调用函数时需要在外面嵌一层table()函数,然后像查询表一样调用第三步创建的函数

1 select * from table(f_employ('35','18'));

 

 

引用资料:

DM 达梦 SQL 编程(存储过程和函数) 操作示例 https://www.cndba.cn/cndba/dave/article/116504
达梦数据库的自定义类型 https://iask.sina.com.cn/b/newQcS8jQUxY0R.html
达梦数据库动态SQL之SELECT...INTO单行数据返回及多行数据返回 https://blog.csdn.net/a406716524/article/details/122014240
达梦数据库,Oracle 11g、12c集合类型下使用table()操作符对比测试 https://blog.csdn.net/fengxiaozhenjay/article/details/105597424/
达梦数据库,Oracle 11g、12c集合类型下使用table()操作符对比测试 https://www.likecs.com/show-205023184.html