2012-06-20 3 views
1

Ma requête simplifiée est la suivante:ORA-00932 lors de l'utilisation OUTER JOIN sur une vue

INSERT INTO table1 
(acct_no, name, description) 
SELECT a.acct_no, 
b.name, 
TO_LOB(c.description) 
FROM tableA a, viewB b, tableC c 
WHERE a.person_id = b.person_id(+) 
AND a.person_id = c.person_id; 

Remarques: J'utilise Oracle 10g, table1.description est de type LOB, c.description est de type LONG , viewB est une vue, table1.name est du même type de données que b.name

les ci-dessus de retour de la requête:

erreur SQL: ORA-00932: types de données incompatibles: attendu - GOT LONG 00932. 00000 - "types de données incohérents: exp % s obtenu% s "

L'erreur pointe vers la ligne où j'utilise la fonction TO_LOB. Cependant, si je supprime la jointure externe, cela fonctionne correctement. Autrement dit, les travaux suivants:

INSERT INTO table1 
(acct_no, name, description) 
SELECT a.acct_no, 
b.name, 
TO_LOB(c.description) 
FROM tableA a, viewB b, tableC c 
WHERE a.person_id = b.person_id 
AND a.person_id = c.person_id; 

Mais je dois utiliser la jointure externe et je ne peux pas comprendre pourquoi l'aide de la jointure externe sur viewB provoque une erreur de type de données incompatible sur un champ dans une autre table (TableC). Fondamentalement, le TO_LOB() seul (sans la jointure externe) fonctionne et la jointure Outer fonctionne à son tour, mais lorsque les deux sont inclus dans le SQL, cela donne une erreur dans un endroit improbable.

Des idées?

+0

Quel type de données est 'tablec.columnc'? (Btw.obfuscating table et noms de colonnes n'est pas vraiment utile). Et vous devriez vraiment utiliser la syntaxe explicite 'JOIN' et non pas les jointures implicites dans la clause where. –

+0

Désolé à ce sujet. Il y a 26 colonnes et 9 tables dans ma requête d'origine, donc j'ai pensé qu'il était plus facile d'illustrer un SQL simplifié. c.columnC est de type LONG comme indiqué dans les Notes – AKS

+0

J'ai essayé d'utiliser la syntaxe explicite LEFT OUTER JOIN mais les résultats sont les mêmes. – AKS

Répondre