-- Created on 2017/5/17 by ADMINISTRATOR
declare
-- Local variables here
i integer;
j integer;
len number(3) := 0;
pos number(3) := 0;
count1 number(3) := 0;
vec RAW(32) := 'FF11AA3344DDEEBBAA11998855367833FF11AA3344DDEEBBAA11998855367833';
nvec RAW(4);
nvec2 RAW(4);
v_start TIMESTAMP(8) ;
v_end TIMESTAMP(8) ;
v_interval INTERVAL DAY TO SECOND;
begin
-- Test statements here
len := utl_raw.length(vec);
DBMS_OUTPUT.put_line('Vector = ' || vec);
v_start := sysdate;
DBMS_OUTPUT.put_line('v_start = ' || v_start);
for i in 1..len
LOOP
nvec := utl_raw.substr(vec,i,1);
IF utl_raw.compare(nvec,'ff') != 0
THEN
FOR j IN 1..8
LOOP
nvec2 := utl_raw.substr(utl_raw.cast_from_binary_integer(1*power(2,(8-j))),4,1);
IF utl_raw.bit_and(nvec, nvec2) != nvec2
THEN
pos := 8*(i-1)+j;
count1 := count1 + 1;
DBMS_OUTPUT.put_line('pos = ' || pos);
END IF;
END LOOP;
END IF;
END LOOP;
DBMS_OUTPUT.put_line('count1 = ' || count1);
v_end := sysdate;
DBMS_OUTPUT.put_line('v_end = ' || v_end);
v_interval := (v_end - v_start) DAY TO SECOND;
DBMS_OUTPUT.put_line('v_interval = ' || v_interval);
end;
计算结果如下: