2008-09-17 5 views
2

J'ai deux tables que je voudrais complaire. L'une des colonnes est de type glob. Je voudrais faire quelque chose comme ceci:Comment puis-je comparer deux valeurs glob dans Oracle

select key, glob_value source_table 
minus 
select key, glob_value target_table 

Malheureusement, Oracle ne peut pas effectuer d'opérations moins sur globs. Comment puis-je faire ceci?

+0

Est-ce que '' glob' signifie clob'? –

Répondre

6

Le format est le suivant:

dbms_lob.compare( 
lob_1 IN BLOB, 
lob_2 IN BLOB, 
amount IN INTEGER := 18446744073709551615, 
offset_1 IN INTEGER := 1, 
offset_2 IN INTEGER := 1) 
RETURN INTEGER; 

Si dbms_lob.compare (lob1, lob2) = 0, ils sont identiques.

Voici un exemple de requête en fonction de votre exemple:

Select key, glob_value 
From source_table Left Join target_table 
    On source_table.key = target_table.key 
Where target_table.glob_value is Null 
    Or dbms_lob.compare(source_table.glob_value, target_table.glob_value) <> 0 
1

Pouvez-vous accéder aux données via un package intégré? Si oui, alors peut-être vous pourriez écrire une fonction qui retourne une chaîne représentant des données (par exemple, une sorte de hachage sur les données), alors vous pourriez faire

select key, to_hash_str_val(glob_value) from source_table 
minus 
select key, to_hash_str_val(glob_value) from target_table 
Questions connexes