编写一个函数,将具有某个特殊分隔符的字符串转成数组(Oracle)

zaq588421 2014-06-23 08:38:38
编写一个函数,将具有某个特殊分隔符的字符串转成数组:
如字符串 UASD1M,123,1882,IID
根据分割符 , 分别将 UASD1M 123 1882 IID 存入数组中






...全文
250 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 zaq588421 的回复:
兄弟麻烦一下解决一下这道题呗,昨天晚上做了很久没做出来、 寫一個函數(用Oracle完成) 傳遞的值是: {name}test{worker_id}S0888{EMAIL}test@mic.com.tw 等 以{}+value形式的一串有規則字符 要求根據{}中的內容得到value 如果 輸入{name},則得到tes 輸入{worker_id},則得到S0888
你的另一个问题 我回答了 你去看下http://bbs.csdn.net/topics/390818609
zaq588421 2014-06-23
  • 打赏
  • 举报
回复
兄弟麻烦一下解决一下这道题呗,昨天晚上做了很久没做出来、 寫一個函數(用Oracle完成) 傳遞的值是: {name}test{worker_id}S0888{EMAIL}test@mic.com.tw 等 以{}+value形式的一串有規則字符 要求根據{}中的內容得到value 如果 輸入{name},則得到tes 輸入{worker_id},則得到S0888
  • 打赏
  • 举报
回复
此功能可以用Oracle管道函数解决,代码及思路如下

1、创建type用于存储函数返回值
create or replace type type_split as table of varchar2(4000); 
2、Function代码(管道函数)
create or replace function test_split(p_list VARCHAR2, p_sep VARCHAR2) return type_split 
  PIPELINED IS
  l_idx  PLS_INTEGER;
  v_list VARCHAR2(32767) := 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 test_split;
3、函数调用及结果查看
SELECT * FROM table(test_split('aaa,bbb,ccc',',')) ;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧