首先要弄两个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_table
as
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 || '<span class="btn btn-defaut select-btn select-site-wrap" title="' || c2.name || '">' || c2.name || '</span>';
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进行传参:

呵呵。

oracle自定义函数返回结果集的更多相关文章

  1. Mybatis下配置调用Oracle自定义函数返回的游标结果集

    在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...

  2. oracle函数返回结果集

    一.用自定义类型实现 1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: create or replace type type_table is table of ...

  3. oracle调用存储过程和函数返回结果集

    在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...

  4. PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)

    (转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...

  5. 【转】Oracle 自定义函数语法与实例

    原文地址:https://blog.csdn.net/libertine1993/article/details/47264211 Oracle自定义函数的语法如下: create or replac ...

  6. Oracle自定义函数和存储过程示例,自定义函数与存储过程区别

    参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...

  7. PHP自定义函数返回多个值

    PHP自定义函数只允许用return语句返回一个值,当return执行以后,整个函数的运行就会终止. 有时要求函数返回多个值时,用return是不可以把值一个接一个地输出的. return语句可以返回 ...

  8. Oracle自定义函数1

    用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...

  9. Oracle自定义函数

    核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...

随机推荐

  1. CCF关于NOIP复赛网络申诉问题的公告

    CCF NOI竞赛委员会将NOIP复赛网络申诉的有关情况公告如下.凡属于以下情况的申诉,均不予受理 1.非公示期限内提出的申诉,不予受理: 2.与个人名次.他人成绩和他人名次有关的申诉,不予受理: 3 ...

  2. Convert BST to Greater Tree

    Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...

  3. top 常用

    top -c 查看进程 同时 shift +m 内存倒序

  4. Vue2.0

    Vue 1.0到2.0的变化: 1.在每个组件的模板中,不再支持片段代码 组件中的模板: 之前: <template> <h3我是组件<strong>我是加粗模板< ...

  5. 20155208徐子涵 Exp4 恶意代码分析

    20155208徐子涵 Exp4 恶意代码分析 实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使 ...

  6. day06 内存地址 小数据池缓存机制

    1. 内存相关 示例一 v1=[11,22,33] v2=[11,22,33] #值相等 内存地址不等 v1=11 v2=11 #按理说内存地址应该不等,但是python为了优化使其内存地址相等 v1 ...

  7. python:用wordcloud生成一个文本的词云

    今天学习了wordcloud库,对<三国演义>生成了词云图片,非常漂亮.就想多尝试几个,结果发现一系列问题.最常出现的一个错误就是"UnicodeDecodeError : .. ...

  8. Java类加载过程及static详解

    类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段. 其中类加载过程包括加载.验证.准备.解析和初始化五个阶段. 类加载器的任务就是根据一个类的 ...

  9. oracle删除当前用户以及当前用户所有表、索引等操作

    ORACLE删除当前用户下所有的表的方法 如果有删除用户的权限,则可以: drop user user_name cascade; 加了cascade就可以把用户连带的数据全部删掉.删除后再创建该用户 ...

  10. Spring事务原理

    Spring事务的本质是对数据库事务的封装支持,没有数据库对事务的支持,Spring本身无法提供事务管理功能.对于用JDBC操作数据库想要用到事务,必须经过获取连接——>开启事务——>执行 ...