oracle自定义函数返回结果集
首先要弄两个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自定义函数返回结果集的更多相关文章
- Mybatis下配置调用Oracle自定义函数返回的游标结果集
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
- oracle函数返回结果集
一.用自定义类型实现 1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: create or replace type type_table is table of ...
- oracle调用存储过程和函数返回结果集
在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- 【转】Oracle 自定义函数语法与实例
原文地址:https://blog.csdn.net/libertine1993/article/details/47264211 Oracle自定义函数的语法如下: create or replac ...
- Oracle自定义函数和存储过程示例,自定义函数与存储过程区别
参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...
- PHP自定义函数返回多个值
PHP自定义函数只允许用return语句返回一个值,当return执行以后,整个函数的运行就会终止. 有时要求函数返回多个值时,用return是不可以把值一个接一个地输出的. return语句可以返回 ...
- Oracle自定义函数1
用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数 ...
- Oracle自定义函数
核心提示:函数用于返回特定数据.执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] da ...
随机推荐
- PPT设计灵感功能
最近老师让我们做PPT,我用的是power point是office365加强版.我发现如果想平常那样直接做的话排版太死板了,不好看.我当时想:管他呢,先做出来再说.刚输完标题,放了几张图片进去右边就 ...
- spoj mgame
题解: f[i][j]表示先后手最大差 g[i][j]表示在最大差的时候是否有后手没得走 代码: #include<bits/stdc++.h> using namespace std; ...
- keras在win下的安装,使用等
http://cache.baiducontent.com/c?m=9d78d513d99a16ef4fece42d4c01d6160e2482744cd7c7637ac3e34a84652b5637 ...
- 1093 字符串A+B
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集.要求先输出 A,再输出 B,但重复的字符必须被剔除. 输入格式: 输入在两行中分别给出 A 和 B,均为长度不超过 106 ...
- 人群密度估计 CrowdCount
最近在看人群密度估计方面的东西,把博客看到的一些方法简单总结一下,后续继续添加. 1.论文<CrowdNet: A Deep Convolutional Network for DenseCro ...
- 2017-9-3模拟赛T1 卡片(card)
题目 [题目描述] lrb 喜欢玩卡牌.他手上现在有n张牌,每张牌的颜色为红绿蓝中的一种.现在他有两种操作.一是可以将两张任意位置的不同色的牌换成一张第三种颜色的牌:二是可以将任意位置的两张相同颜色的 ...
- itextsharp报错PdfReader not opened with owner password
itextSharp读取Pdf时报错:PdfReader not opened with owner password 报错原因:pdf文件被用户加密了. 解决办法:在创建pdfReader实例后,加 ...
- 后台获取用户登录token 和获取前端参数方法
//获取request请求中所有参数 Enumeration<String> names = request.getParameterNames(); HashMap<String, ...
- s21day09 python笔记
s21day09 python笔记 一.三元运算(三目运算) 用途:用于简单的if条件语句 基本结构 v = 前面 if 条件 else 后面 #如果条件为真,v = 前面,否则,v = 后面 &qu ...
- RabbitMQ python模块pika生产者消费者轮询模型。
完整代码如下: 生产者,producer import pika connection = pika.BlockingConnection( pika.ConnectionParameters('lo ...