длина подстроки для цикла - PullRequest
0 голосов
/ 01 июля 2018

Доброе утро, ребята, у меня проблема с кодом, я работаю в системе здравоохранения, и код жалобы должен быть установлен, но они запрашивают отчет, содержащий код лечения, который появится в базе данных, как 1: 15: 2: 3 и т. Д., Поэтому мне нужно рассчитать каждый код отдельно я должен считать до тех пор, пока не получу ":", тогда мне нужно взять число, которое может быть 1 или 2 цифрой, а затем сделать внутреннее соединение с другой таблицей может кто-нибудь помочь мне исправить эту функцию и проблему в цикле и получить номер для каждого

create or replace function hcc_get_tcd_codes (p_id in number )
return varchar2 is
x number := 0 ;
y number := 0 ;
z number ;
code1 number ;
code_name varchar2(15);

begin


for i in 0 .. x 
  loop

select length(t.tcd_codes ) into x from hcc_patient_sheet t  where t.id = p_id ;    --- (9)العدد كامل

select instr(tcd_codes, ':') into y from hcc_patient_sheet t where t.id = p_id ;    ---- عدد الكود الاو(3)ل

select instr(tcd_codes, ':')+1 + y into z from hcc_patient_sheet t where t.id = p_id ;     --عدد الكود كامل +1 

enter code here
        i := x -y ;
    select substr(t.tcd_codes,z, instr(tcd_codes, ':')-1) into code1 
--,select substr(t.tcd_codes, 0, instr(tcd_codes, ':')-1) as code2 
  from Hcc_Patient_Sheet t
 where t.id  = 631 ;

 select t.alt_name into code_name from  hcc_complaint_codes t where t.code = code1 ;
select instr(tcd_codes, ':') into y from hcc_patient_sheet t where t.id = p_id ;    ---- عدد الكود الاول

return code_name ;
end loop ;
end;

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Часто из-за частых проблем обработки звучащих струн колесо уже было изобретено и даже упаковано.

select * from table(apex_string.split('THIS:IS:GREAT',':'));

enter image description here

0 голосов
/ 01 июля 2018

Частичное SUBSTR не кажется лучшим вариантом; Я бы посоветовал вам разбить эту строку значений, разделенных двоеточиями, на строку следующим образом:

SQL> with test (col) as
  2    (select '1:15:2:3' from dual)
  3  select regexp_substr(col, '[^:]+', 1, level) one_value
  4  from test
  5  connect by level <= regexp_count(col, ':') + 1;

ONE_VALUE
--------------------------------
1
15
2
3

SQL>

и используйте такую ​​опцию в своем запросе; как то так:

select ...
into ...
from some_table t 
where t.id in (select regexp_substr(that_string, '[^:]+', 1, level) one_value
               from dual
               connect by level <= regexp_count(that_string, ':') + 1
              );

Если он должен быть построчным, используйте вышеуказанную опцию в качестве источника для цикла FOR курсора, например

for cur_r in (select regexp_substr(that_string, '[^:]+', 1, level) one_value
              from dual
              connect by level <= regexp_count(that_string, ':') + 1
             )
loop
  do_something_here
end loop;
...