Ik heb in het verleden soortgelijke problemen gehad. Toen kwam ik tot de conclusie dat Oracle's db-links fundamenteel "gebroken" zijn voor alles behalve eenvoudige SQL-types (vooral UDT's, CLOBS kunnen problemen hebben, XMLType ook). Als je de OID-oplossing kunt laten werken, veel succes.
De oplossing waartoe ik mijn toevlucht nam, was om een Java Stored-procedure te gebruiken in plaats van de DB Link.
Kenmerken van de Java Stored Procedure:
- Kan een "rijke reeks typen" retourneren, zowat alle complexe typen (UDT's, tabellen/arrays/varrays) zie Online documentatie van Oracle voor details. Oracle kan complexe (of rijke) typen uit java veel beter rangschikken dan uit een DBLink.
- Opgeslagen Java kan de "standaardverbinding" verkrijgen (draait in dezelfde sessie als de SQL-verbinding met de db - geen authenticatieproblemen).
- Opgeslagen Java roept de PL/SQL-proc op de externe DB aan en de java JDBC-laag doet de marshaling vanaf de externe DB.
- Opgeslagen Java verpakt het resultaat en retourneert de resultaten naar de SQL- of PL/SQL-laag.
Het is een beetje werk, maar als je een beetje java hebt, zou je een oplossing moeten kunnen "knippen en plakken" vanuit de Oracle-documentatie en het voorbeeld.
Ik hoop dat dit helpt.