create or replace procedure gx_add_time_apply ( resultStr out varchar, v_apply in CHAR ) is v_sql char(2000); v_cnt number; c_m char; v_n number; v_m number; v_r varchar(200); v_time varchar(200); v_u varchar(200); v_k number; c number; v_message varchar(200); v_date char(30); v_apply_no number; Begin --初始化消息 v_message:=''; --请自行编辑存储过程函数体 ---选出空间表信息v_apply的长度 v_apply_no:=gx_apply_no.nextval; select length(trim(v_apply)) - length(replace(trim(v_apply), ';', '')) into v_n from dual; -- for循环选出每个;下的字符串,并截取出时间段 FOR v_m IN 1 .. (v_n + 1) LOOP v_r := regexp_substr(v_apply, '[^;]+', 1, v_m); v_time :=substr(v_r,1,11); --在字符串v_r上循环,选出为1的位置 for v_k in 2..8 loop v_u := regexp_substr(v_r,'[^&]+',1,v_k); if v_u=1 then --时间段空间位置记录 v_message:=v_message||v_time||v_m||(v_k-1); end if; end loop; END LOOP; f v_message!='' or v_message is not null then ResultStr := v_message; return; end if; ResultStr := 'success:提交成功'; End;
上面是给定字符串v_apply=00:00-05:00&0&1&3&0&1&0&1;00:05-10:00&0&0&0&0&1&0&1,此类格式字符串确定1位置的程序。使用了两次循环先选取出字符串00:00-05:00&0&1&3&0&1&0&1,截取时间段00:00-05:00,然后在找出1的位置。循环,知道找出所有1所在位置。