存储过程分割一个字段为多个值

来源:互联网 发布:mc9s12x 串口编程 编辑:程序博客网 时间:2024/06/05 21:02

      

如图有这样一个需求:
需要根据serv_code=111得到对应的cmd_list中的值,并且,要将1000,1001,1002分别分割出来插入到另一个表中。
create table yyb_serv(  SERV_CODE    VARCHAR2(1024),  CMD_LIST     VARCHAR2(100))insert into yyb_serv values('111','1000,1001,1002');create or replace procedure Testis--定义游标类型type serv_cursor is ref cursor;--定义一个游标变量serv_cur serv_cursor ;--定义临时变量v_cmd_list yyb_serv.cmd_list%type;temp varchar(2000);result varchar2(32);begin  ---取出要分割的字段的值open serv_cur for   select cmd_list from yyb_serv where    serv_code like '%111%';  --循环取出游标内容    loop   fetch serv_cur into v_cmd_list;   exit when serv_cur %notfound;   -----------------   temp:=v_cmd_list;   dbms_output.put_line('-------start----------');   --开始循环分割字段    while(length(temp)>0)      loop          --如果有逗号,以逗号进行分割          if INSTR(temp,',' ) > 0 then             result:= SUBSTR(temp ,1,INSTR(temp,',') - 1 );             --取到第n个逗号(也就是第n次循环)后面的剩余字符串             temp := SUBSTR(temp,INSTR(temp,',') + 1 , LENGTH(temp) - INSTR(temp,','));          --没有逗号,说明不需要分割          else             result:= temp;             temp:= '';          end if;       --输出当前的已分割出的结果       DBMS_OUTPUT.put_line(result);      end loop;   dbms_output.put_line('-------end----------');   -----------------   dbms_output.put_line('结束');--结束游标循环end loop;close serv_cur;end test;

原创粉丝点击