oracle 自定义列转行函数
发布时间:2020-12-12 16:07:18 所属栏目:百科 来源:网络整理
导读:-- 定义一个对象类型. CREATE OR REPLACE TYPE ty_row_str_split as object (strValue VARCHAR2 (4000)); -- 定义一个 表/数组类型, 内容是前面定义的那个对象. CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split; -------------------
-- 定义一个对象类型.
CREATE OR REPLACE TYPE ty_row_str_split as object (strValue VARCHAR2 (4000)); -- 定义一个 表/数组类型, 内容是前面定义的那个对象. CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split; -------------------- -- 字符分割函数. -- 参数1: 被分割的源字符串 -- 参数2: 用于拆分的字符串。 -------------------- CREATE OR REPLACE FUNCTION fn_split( p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_tbl_str_split IS j INT := 0; i INT := 1; -- 被分割的源字符串 的长度. len INT := 0; -- 分隔字符串的长度 len1 INT := 0; -- 暂存的中间每一个单元的文本信息. str VARCHAR2(4000); -- 预期返回结果. str_split ty_tbl_str_split := ty_tbl_str_split(); BEGIN -- 被分割的源字符串 的长度. len := LENGTH(p_str); -- 分隔字符串的长度. len1 := LENGTH(p_delimiter); -- 遍历 被分割的源字符串. WHILE j < len LOOP -- 在被分割的源字符串中, 查询 分隔字符串. j := INSTR(p_str,p_delimiter,i); IF j = 0 THEN -- j=0 意味着没有找到. -- 可以理解为是查询到最后一个单元了. -- 设置 j := len, 让外部的循环处理可以结束了. j := len; -- 获取最后一个单元的内容. str := SUBSTR(p_str,i); -- 结果追加一行. str_split.EXTEND; -- 设置结果内容. str_split(str_split.COUNT) := ty_row_str_split(strValue => str); IF i >= len THEN EXIT; END IF; ELSE -- 如果在被分割的源字符串中,找到了 分隔字符串. -- 首先,获取分割的内容. str := SUBSTR(p_str,i,j - i); -- 然后设置索引, 下一次再查找的时候,从指定的索引位置开始(不是从0开始找了) i := j + len1; -- 结果追加一行. str_split.EXTEND; -- 设置结果内容. str_split(str_split.COUNT) := ty_row_str_split(strValue => str); END IF; END LOOP; RETURN str_split; END fn_split; ---------------------------------------------------------- select t.id,to_char(strvalue) as Valuefromdemo_sgsjyth t,table(fn_split( t.busi_name,','));
转换后结果
当然这个地方还需要做一些去重的操作这里就不在赘述了简单的去重就可以实现了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- string – Entity Framework&Oracle:无法插入VARCHAR2
- org.json使用指南
- SQLITE3 使用总结(SQL语句操作,加密)
- ruby-on-rails – rails 3.1生成CSV文件
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- ajax – 由watchguard剥离的CORS Access-Control-Allow-Ori
- react-native – 如何自定义React Native ListView的Refres
- c – 为什么rvalue / const引用有内存地址和大小?
- 流数据挖掘(三)
- flash – 在ActionScript 3.0中缺少操作符重载