ORACL字符串匹配查询问题
ORACL字符串匹配查询
现在有两个表
A1
A1_ID,ADDRESS
A1表记录大概3000多条
A2
A2_ID,ADDRESS
A2表记录大概20000多条
A1,A2表只能通过ADDRESS字段里的值模糊匹配查询
我在网上找了一段ORACLE字符串无序匹配函数/*函数体(以一个字符为单位进行分割比较)*/
CREATE OR REPLACE FUNCTION FUN_MATCH_CNT(P_STR VARCHAR2, P_STR2 VARCHAR2) RETURN VARCHAR2 IS
    V_MOTHER VARCHAR2(4000);
    V_MATCH  VARCHAR2(20);
    V_LENGTH NUMBER;
    V_LENM   NUMBER :=2;
    V_NUM    NUMBER := 0;
    V_CNT    NUMBER ;
    V_MATCHSTR VARCHAR2(200):=' ';
    V_MATECHED VARCHAR2(200):=' ';
  BEGIN     
    V_CNT  := 0;
    V_MOTHER := P_STR;
    --V_MATCH := P_STR2;
    --将 V_MOTHER值改变成每一个字符被逗号隔开的值
    V_LENGTH := LENGTH(REPLACE(P_STR,',','')) / 1;
    V_LENM   := LENGTH(P_STR2) / 1;
    IF(INSTR(V_MOTHER,',')= 0 ) THEN      
    FOR X IN 1 .. (V_LENGTH - 1) LOOP
    V_MOTHER := SUBSTR(V_MOTHER, 1, (V_LENGTH - X) * 1) || ',' ||SUBSTR(V_MOTHER, (V_LENGTH - X) * 1 + 1);
    END LOOP;
    END IF;
    --DBMS_OUTPUT.PUT_LINE(V_MOTHER);
    --针对每个基本单位进行比较
    FOR Y IN 1 .. V_LENM LOOP      
    V_MATCH := SUBSTR(P_STR2, Y * 1, 1);
    SELECT SIGN(INSTR(V_MOTHER,V_MATCH )) INTO V_NUM FROM DUAL;
    IF V_NUM = 1 THEN
    V_MATECHED := TRIM(V_MATECHED||V_MATCH);
    SELECT SUBSTR(V_MOTHER,1,INSTR(V_MOTHER, V_MATCH)-1)||SUBSTR(V_MOTHER,INSTR(V_MOTHER, V_MATCH)+1) INTO V_MOTHER FROM DUAL;
    V_CNT := V_CNT + V_NUM;
    --V_CNT := V_CNT + FUN_MATCH_CNT(V_MOTHER,V_MATCH);
    V_MATECHED := TRIM(V_MATECHED||NVL(FUN_MATCH_CNT(V_MOTHER,V_MATCH),' '));
    END IF;
    END LOOP;                
    ---DBMS_OUTPUT.PUT_LINE(V_CNT);
    -- RETURN V_CNT;
    RETURN TRIM(V_MATECHED);
  END;
想实现以下功能:
1、生成以A1为全记录关联A2表的A3表
格式如下:
A1_ID,A1_ADDRESS,A2_ID,A2_ADDRESS
2、如果A2中可能会有多条记录中的ADDRESS值和A1的ADDRESS值匹配,但只取匹配的字符串最多一条A2中的记录
请问如何实现