ITPub博客

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

PLSQL实现两个字符串匹配 1

原创 Oracle 作者:Sampson1 时间:2014-01-26 16:34:28 0 删除 编辑
功能:找出字符串B在字符串A中存在的字符

/********************************************
找出字符串l_b中字母在字符串l_a中存在的字母
**********************************************/
DECLARE 
  l_a Varchar2(50) := 'ABCDEFGHIK';
  l_b VARCHAR2(50) := 'EDGLKJOS';
  l_length NUMBER;
  l_length2 NUMBER;
  TYPE var_a IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
  vara var_a;
  varb var_a; 
  v VARCHAR2(1);
  l_count NUMBER;
BEGIN
  l_length := LENGTH(l_a);
  l_length2 := LENGTH(l_b);
  l_count := 0;
  
  
  --把字符串l_a放入数组vara数组中
  FOR i IN 1..l_length LOOP
    vara(i) := SUBSTRB(l_a,1,1);
    l_a := SUBSTRB(l_a,2,l_length);
  END LOOP;
  
  --把字符串l_b放入数组varb数组中
  FOR i IN 1..l_length2 LOOP
    varb(i) := SUBSTRB(l_b,1,1);
    l_b := SUBSTRB(l_b,2,l_length2);
  END LOOP;
  
  --双重循环找出l_b在l_a中存在的字母
  FOR i IN 1..l_length2 LOOP
    FOR j IN 1..l_length LOOP
        l_COUNT := l_COUNT + 1;
      IF varb(i) = vara(j) THEN 
        dbms_output.put(varb(i) || ' ');
      END IF;
    END LOOP;
  END LOOP;
  dbms_output.put_line(l_count);
  l_count := 0;
  
  --对l_a进行排序
  FOR i IN 1..l_length LOOP
    FOR j IN i..l_length LOOP
      IF vara(i) > vara(j) THEN 
         v := vara(i);
         vara(i) := vara(j);
         vara(j) := v;
      END IF;
    END LOOP;
  END LOOP;
  
  --输出l_a字符串
  FOR i IN 1..l_length LOOP
    dbms_output.put(vara(i) || ' ');
  END LOOP;
  dbms_output.put_line('');
  
  --对l_b进行排序
  FOR i IN 1..l_length2 LOOP
    FOR j IN i..l_length2 LOOP
      IF varb(i) > varb(j) THEN 
         v := varb(i);
         varb(i) := varb(j);
         varb(j) := v;
      END IF;
    END LOOP;
  END LOOP;
  
  --输出l_b字符串
  FOR i IN 1..l_length2 LOOP
    dbms_output.put(varb(i) || ' ');
  END LOOP;
  dbms_output.put_line('');
 
  --先对l_a和l_b进行排序,然后进行比较
  FOR i IN 1..l_length LOOP 
    <>
    FOR j IN 1..l_length2 LOOP    
      l_count := l_count + 1;
      IF vara(i) = varb(j) THEN 
        dbms_output.put(vara(i) || ' ');
        EXIT lable_1;
      END IF;    
      
    END LOOP lable_1;
  END LOOP;
  dbms_output.put_line(l_count);
  
END;

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

请登录后发表评论 登录
全部评论

注册时间:2013-04-19

  • 博文量
    7
  • 访问量
    18391