博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle自定义函数返回结果集
阅读量:5104 次
发布时间:2019-06-13

本文共 1837 字,大约阅读时间需要 6 分钟。

首先要弄两个type,不知道什么鬼:

1.

create or replace type obj_table as object(  id varchar2(38),  name varchar2(4000),  count varchar2(10))

2.

create or replace type t_table is table of obj_table

函数体:

create or replace function getStationListTb(s number)return t_tableas    rs t_table:= t_table();    str varchar2(4000);    i number := 0;begin    for c in (select DepartmentId from sys_department) loop    str := '';    i := 0;    for c2 in (select t2.name from sys_departmentstation t1               left join bsd_station t2 on t1.stationid=t2.stationid where t1.DepartmentId=c.departmentid) loop      str := str || '' || c2.name ||  '';      i := i + 1;    end loop;    str := substr(str,0,length(str)-1);    rs.extend;    rs(rs.count) := obj_table(c.departmentid,str,to_char(i));  end loop;return rs;end getStationListTb;

好奇怪的,这个函数我不定义参数它就出错,稍微哪里写错一点东西,就报错,又没提示哪里错,感觉好难写的;这次难得写成功了,赶紧记录下来,下次直接过来copy。

调用:

select * from table(getStationListTb(1))

那么,这个函数出来就是一张表了,可以把它看成表去使用:

SELECT t1.*,t2.name StationList,t2.count StationCount FROM SYS_Department t1      left join (select * from table(getStationListTb(1))) t2 on t1.DepartmentId=t2.id      WHERE 1=1

先前还写了个按照ID去获取每行数据的:

create or replace function getStationList(DepartmentId  VARCHAR2) return VARCHAR2    as      --定义变量      resultStr VARCHAR2(8000);    begin      for c in (select stationid                  from sys_departmentstation                  where DepartmentId=DepartmentId) loop           resultStr := resultStr || c.stationid || ',';       end loop;      return substr(resultStr,0,length(resultStr)-1);    end getStationList;

想这样直接根据ID关联数据:

SELECT t1.*,getStationList(t1.DepartmentId) StationList FROM SYS_Department t1

结果出来呵呵的,完全不像sql那样会根据每行的DepartmentId去传参执行getStationList(DepartmentId VARCHAR2)函数,而是一直使用第一行的DepartmentId进行传参:

呵呵。

转载于:https://www.cnblogs.com/vinsonLu/p/6546926.html

你可能感兴趣的文章
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
StringBuffer是字符串缓冲区
查看>>
hihocoder1187 Divisors
查看>>
java入门
查看>>
Spring 整合 Redis
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
JSP:Cookie实现永久登录(书本案例)
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
linux--GCC用法
查看>>
Ubuntu下安装MySQL及简单操作
查看>>
OWIN是什么?
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>
0906第一次作业
查看>>
移动开发平台-应用之星app制作教程
查看>>
jquery validate使用笔记
查看>>
主要的几个脑网络——整理自eegfmri的博客
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>