accept p_num1 prompt '배열 '
accept p_num2 prompt '찾는 숫자 '
declare
v_num1 varchar(200) := '&p_num1';
v_num2 number(10) := &p_num2;
type array_t is varray(100) of number(10);
array_real array_t := array_t(regexp_substr(v_num1,'[^ ]+',1,1),
regexp_substr(v_num1,'[^ ]+',1,2),
regexp_substr(v_num1,'[^ ]+',1,3),
regexp_substr(v_num1,'[^ ]+',1,4),
regexp_substr(v_num1,'[^ ]+',1,5),
regexp_substr(v_num1,'[^ ]+',1,6),
regexp_substr(v_num1,'[^ ]+',1,7),
regexp_substr(v_num1,'[^ ]+',1,8),
regexp_substr(v_num1,'[^ ]+',1,9),
regexp_substr(v_num1,'[^ ]+',1,10),
regexp_substr(v_num1,'[^ ]+',1,11),
regexp_substr(v_num1,'[^ ]+',1,12),
regexp_substr(v_num1,'[^ ]+',1,13),
regexp_substr(v_num1,'[^ ]+',1,14),
regexp_substr(v_num1,'[^ ]+',1,15));
v_count number(10) := round(array_real.count/2);
v_min number(10) := round(array_real.count/2);
begin
loop
if array_real(v_count) < v_num2 then
v_min := v_min/2;
v_count := v_count + v_min;
elsif array_real(v_count) > v_num2 then
v_min := v_min/2;
v_count := v_count - v_min;
end if;
if array_real(v_count) = v_num2 then
exit;
elsif v_min = 1 then
exit;
end if;
end loop;
if array_real(v_count) = v_num2 then
dbms_output.put_line(array_real(v_count));
end if;
if array_real(v_count) != v_num2 then
dbms_output.put_line('찾는 숫자가 없습니다');
end if;
end;
/