Oracle中函数/过程返回结果集的几种方式
Oracle中函数/过程返回结果集的几种方式: CREATE OR REPLACE FUNCTION A_Test( orType varchar2 )RETURN SYS_REFCURSOR is type_cur SYS_REFCURSOR; BEGIN OPEN type_cur FOR select col1,col2,col3 from testTable ; RETURN type_cur; END; (2)返回table类型的结果集: 首先定义一个行类型: CREATEORREPLACETYPE"SPLIT_ARR"ASOBJECT(nowStrvarchar2(18)) 其次以此行类型定义一个表类型: CREATETYPE"SPLIT_TAB"TABLEofsplit_arr; 定义函数(此函数完成字符串拆分功能): FUNCTION GetSubStr( str in varchar2,--待分割的字符串 splitchar varchar2 分割标志 ) return split_tab IS restStr varchar2(2000) default GetSubStr.str;剩余的字符串 thisStr 18);取得的当前字符串 indexStr int;临时存放分隔符在字符串中的位置 v split_tab := split_tab(); 返回结果 begin dbms_output.put_line(restStr); while length(restStr) != 0 LOOP <<top>> indexStr := instr(restStr,splitchar); 从子串中取分隔符的第一个位置 if indexStr = 0 and length(restStr) 0 then在剩余的串中找不到分隔符 begin v.extend; v(v.count) := split_arr(Reststr); return v; end; end if; 1 -第一个字符便为分隔符,此时去掉分隔符 begin restStr := substr(restStr,2); goto top; if length(restStr) or restStr is null then return v; if; v.extend; thisStr :1,indexStr - 1); 取得当前的字符串 restStr :+ 1);-取剩余的字符串 v(v.= split_arr(thisStr); END LOOP; return v; end;在PL/SQL developer中可以直接调用 cursorstrcuris selectnowStrfromTable(GetSubStr('111,222,333,',',0)">)); (3)以管道形式输出: create type row_type as object(a 10),v 10));定义行对象 create type table_type as table of row_type; 定义表对象 create or replace function test_fun( a varchar2 ) return table_type pipelined is v row_type;定义v为行对象类型 begin for thisrow in (select a,b from mytable where col1=a and col2 = b) loop v := row_type(thisrow.a,thisrow.b); pipe row (v); end loop; return; end; select * from table(test_fun('123',0)">456')); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |