全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle 应用管道函数时 pipelined 出现PLS-00653:在 PL/SQL 定义域内不允许有聚集/表函数 网友说:在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。 9i 通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样。管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回。管道化表函数更加有效, 因为数据可以尽可能快地返回。 自己总结: 管道化表函数 pipelined 必须返回一个集合。在函数中,PIPE ROW 语句被用来返回该集合的单个元素,该函数必须以一个空的 RETURN 语句结束,以表明它已经完成。一旦我们创建了上述函数,我们就可以使用 TABLE 操作符从 SQL 查询中调用它。 也就是实际操作当中我们需要是一个数据源 而不仅是一张表 所以用到管道化表函数,而且用这个函数在返回大数据时候传输的速度比较快。下面是有关 pipelined在生活中的 用遇到的一些问题:1.创建一个表类型的B create or replace type T as table of varchar(300)2.比如我们创建一个带pipelied管道函数返回一张表或一个数据源数据的函数Acreate or replace function A(paras varchar2)return T pipelined isbegin .return;-注意这边直接返回就可以了end A;和创建一个不带该管道函数同样也返回一张表的类型的函数B。create or replace function B(paras varchar2)return T is var_out T;begin .return var_out;-这边必须有个输出参数作为返回值end B;3.接下来我们创建一个存储过程C 去调用A 和 Bcreate or replace procedure C(paras varchar2)isvar_out T; begin - 方法(1) T:=A(parasValues);-这边调用带pipelined 函数的函数A -直接报错 PLS-00653: 在 PL/SQL 定义域内不允许有聚集/表函数 这是因为管道函数 需要用TABLE 操作符从 SQL 查询中调用它 所以这边不能直接赋值这边要赋值可以这样修改select A(parasValues) into T from dual; 就可以- 方法 (2) T:=B(parasValues);-这边调用函数B .end C;难道是在存储过程中调用pipelined 函数是不行的吗?答案:是可以的。管道函数调用过程不能直接用:=进行赋值 我们可以采用上面使用赋值方式select A(parasValues) into T from dual; 下面是提供一个完整管道函数拆分字符串 代码我已经测试过没问题 。pl/sql执行就OK-创建类型create or replace type type_split as table of varchar2(50);-创建管道函数create or replace function split( p_list varchar2, p_sep varchar2 := ,) return type_split pipelined -管道函数关键字 is l_idx pls_integer; v_list varchar2(50) := p_list;begin loop l_idx := instr(v_list,p_sep); if l_idx 0 then pipe row(substr(v_list,1,l_idx-1); v_list := substr(v_list,l_idx+length(p_sep); else pipe row(v_list); exit; end if; end loop; return;end split;-测试改管道函数是否正确selectcolumn_valuefromtable(split(Hello,Cnblogs!,);-在存储过程调用运用该管道函数create or replace procedure prc(para out varchar2) is var_out varchar2(200); var_split type_split; begin -调用方式一 输出拆分的字符串 for p in (selectcolumn_valuefromtable(split(Hello,Cnblogs!,) loop var_out:=var_out|p.column_value; end loop; -调用方式二 输出拆分的字符串 select split(Hello,Cnblogs!,) into var_split from dual; for i in var_split.first().var_split.last() loop var_out:=var_out|var_split(i); dbm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 井下出矿工岗中环保竞赛考核试卷含答案
- 半导体分立器件封装工操作规范水平考核试卷含答案
- 药物分离纯化工岗中协同配合考核试卷含答案
- 长度计量员岗位设备维护考核试卷含答案
- 兽医化验员工作能力强化考核试卷含答案
- 2025年阜阳市颍上县三年级数学第二学期期中检测模拟试题(含答案)
- 内科国家年度考试试题及答案
- 2026事业单位笔试-福建-福建内分泌科(医疗招聘)历年参考题库含答案详解
- 2026中级钳工(官方)-机械设备保养与维修参考试题库历年考点答案详解
- 2026年山西省人教版高二地理第2章旅游地理练习题
- 中药新药致心律失常(QT间期延长)临床安全性评价技术规范
- 电工技能与实训 课件 项目7 三相电动机控制电路安装与维修
- GB/T 18851.2-2024无损检测渗透检测第2部分:渗透材料的检验
- DB41T 2453-2023 煤矿带式输送机保护装置安装及试验技术规范
- 农村安全饮水工程给水管道沟槽开挖工序质量评定表
- GB/T 18029.1-2024轮椅车第1部分:静态稳定性的测定
- QBT 2623.4-2003 肥皂试验方法 肥皂中水分和挥发物含量的测定 烘箱法
- 鲁教版五四制六年级数学上册全套教案
- 2023-2024部编版小学六年级《道德与法治》上册全册教案
- 国家电网实习报告
- 中职数学开学第一课课件
评论
0/150
提交评论