第一步:创建记录类型
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