Bonjour,
J'ai un problème avec une de mes requetes et je ne sais vraiment pas d'où ça peut venir.
Je cherche à comparer le nom d'un attribut de ma première table avec toutes les lignes de la deuxième table, pour trouver les lignes qui auraient un nom similaire, avec un pourcentage passé en paramètre.
Ensuite, je souhaite remplir une table de résultat qui contiendrait le nom de l'attribut de départ et son numéro, le nom similaire et le numéro associé ainsi que le degré de similitude.
Voila mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
CREATE OR REPLACE
PROCEDURE SIM_MISS30(p_similarity NUMBER) AS
TYPE t_Cursor IS REF CURSOR;
C1 t_Cursor;
C2 t_Cursor;
v_b_row T_B%ROWTYPE;
similar_name T_CDQ.GSI_PARTY_NAME%TYPE;
similar_number T_CDQ.GSI_PARTY_NUMBER%TYPE;
BEGIN
OPEN C1 FOR
SELECT * FROM T_B;
LOOP
EXIT WHEN C1%NOTFOUND;
FETCH C1 INTO v_b_row;
OPEN C2 FOR
SELECT DISTINCT GSI_PARTY_NUMBER,GSI_PARTY_NAME FROM T_CDQ WHERE utl_match.jaro_winkler_similarity(T_CDQ.GSI_PARTY_NAME, v_b_row.PARTY_NAME) > p_similarity;
LOOP
EXIT WHEN C2%NOTFOUND;
FETCH C2 INTO similar_number,similar_name;
INSERT INTO T_SIM VALUES (v_b_row.PARTY_NUMBER,v_b_row.PARTY_NAME, similar_number, similar_name,utl_match.jaro_winkler_similarity(similar_name,v_b_row.PARTY_NAME));
COMMIT;
END LOOP;
CLOSE C2;
END LOOP;
CLOSE C1;
END; |
J'ai comme erreur sous sql developer :
Error report:
Il n'y a plus de données à lire dans le socket
et sous sql plus :
ORA-03113: fin de fichier sur canal de communication
Dans les deux cas, ça me déconnecte de la base.
Ma table T_B contient 2550 lignes et ma table T_CDQ en contient 51421.
J'ai pensé que le parcours était trop important et donc j'ai essayé avec une restriction sur la table T_B.
SELECT * FROM T_B WHERE ROWNUM < 10;
En dessous de 10, ça fonctionne. De temps en temps ça fonctionne pour 100 mais je n'ai jamais réussi à dépasser 180 lignes...
Je ne sais pas si j'ai été trés claire.. c'est la première fois que je poste ...
Est ce que vous voyez d'où ça peut venir ?
Merci de votre aide.
Partager