功能:找出字符串l_b中字母在字符串l_a中存在的字母
思路:先把字母转换成素数,然后用l_a的积除以l_b中的每个字母对应的素数,余数为0则表示存在。
/********************************************
找出字符串l_b中字母在字符串l_a中存在的字母
**********************************************/
DECLARE
l_a Varchar2(50) := 'ADEFGHIKX';
l_b VARCHAR2(50) := 'EDGLKJOS';
l_length NUMBER;
l_length2 NUMBER;
v VARCHAR2(1);
TYPE l_num_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
l_num l_num_table;
l_count NUMBER;
l_sum NUMBER;
BEGIN
--A-Z转换成前26位素数
l_sum := 1;
l_count := 0;
l_num(1) := 2;
l_num(2) := 3;
l_num(3) := 5;
l_num(4) := 7;
l_num(5) := 11;
l_num(6) := 13;
l_num(7) := 17;
l_num(8) := 19;
l_num(9) := 23;
l_num(10) := 29;
l_num(11) := 31;
l_num(12) := 37;
l_num(13) := 41;
l_num(14) := 43;
l_num(15) := 47;
l_num(16) := 53;
l_num(17) := 59;
l_num(18) := 61;
l_num(19) := 67;
l_num(20) := 71;
l_num(21) := 73;
l_num(22) := 79;
l_num(23) := 83;
l_num(24) := 89;
l_num(25) := 97;
l_num(26) := 101;
l_length := LENGTH(l_a);
l_length2 := LENGTH(l_b);
--求字符串l_a中字母对应的素数积
FOR i IN 1..l_length LOOP
v := SUBSTRB(l_a,1,1);
l_a := SUBSTRB(l_a,2,l_length);
dbms_output.put_line(ASCII(v)-ASCII('A') + 1);
l_sum := l_sum * l_num(ASCII(v)-ASCII('A') + 1);
END LOOP;
--用l_a中的积除以l_b中的每个字母,判断是否存在
FOR i IN 1..l_length2 LOOP
v := SUBSTRB(l_b,1,1);
l_b := SUBSTRB(l_b,2,l_length2);
l_count := l_count + 1;
IF MOD(l_sum,l_num(ASCII(v)-ASCII('A') + 1)) = 0 THEN
dbms_output.put(v || ' ');
END IF;
END LOOP;
dbms_output.put_line(l_count);
END;
思路:先把字母转换成素数,然后用l_a的积除以l_b中的每个字母对应的素数,余数为0则表示存在。
/********************************************
找出字符串l_b中字母在字符串l_a中存在的字母
**********************************************/
DECLARE
l_a Varchar2(50) := 'ADEFGHIKX';
l_b VARCHAR2(50) := 'EDGLKJOS';
l_length NUMBER;
l_length2 NUMBER;
v VARCHAR2(1);
TYPE l_num_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
l_num l_num_table;
l_count NUMBER;
l_sum NUMBER;
BEGIN
--A-Z转换成前26位素数
l_sum := 1;
l_count := 0;
l_num(1) := 2;
l_num(2) := 3;
l_num(3) := 5;
l_num(4) := 7;
l_num(5) := 11;
l_num(6) := 13;
l_num(7) := 17;
l_num(8) := 19;
l_num(9) := 23;
l_num(10) := 29;
l_num(11) := 31;
l_num(12) := 37;
l_num(13) := 41;
l_num(14) := 43;
l_num(15) := 47;
l_num(16) := 53;
l_num(17) := 59;
l_num(18) := 61;
l_num(19) := 67;
l_num(20) := 71;
l_num(21) := 73;
l_num(22) := 79;
l_num(23) := 83;
l_num(24) := 89;
l_num(25) := 97;
l_num(26) := 101;
l_length := LENGTH(l_a);
l_length2 := LENGTH(l_b);
--求字符串l_a中字母对应的素数积
FOR i IN 1..l_length LOOP
v := SUBSTRB(l_a,1,1);
l_a := SUBSTRB(l_a,2,l_length);
dbms_output.put_line(ASCII(v)-ASCII('A') + 1);
l_sum := l_sum * l_num(ASCII(v)-ASCII('A') + 1);
END LOOP;
--用l_a中的积除以l_b中的每个字母,判断是否存在
FOR i IN 1..l_length2 LOOP
v := SUBSTRB(l_b,1,1);
l_b := SUBSTRB(l_b,2,l_length2);
l_count := l_count + 1;
IF MOD(l_sum,l_num(ASCII(v)-ASCII('A') + 1)) = 0 THEN
dbms_output.put(v || ' ');
END IF;
END LOOP;
dbms_output.put_line(l_count);
END;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28268054/viewspace-1075805/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28268054/viewspace-1075805/