ITPub博客

首页 > 数据库 > Oracle > PLSQL实现两个字符串匹配 3

PLSQL实现两个字符串匹配 3

原创 Oracle 作者:Sampson1 时间:2014-01-27 10:28:37 0 删除 编辑
功能:找出字符串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;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28268054/viewspace-1075805/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 管道函数
请登录后发表评论 登录
全部评论

注册时间:2013-04-19

  • 博文量
    7
  • 访问量
    18171