Bonjour,

Je rencontre actuellement un petit problème que j'ai du mal à résoudre.
J'ai actuellement :
- un serveur PROD1 sous Windows 2003 et Oracle Database 10g Enterprise Edition Release 10.2.0.1.0.
- un serveur APEX1 sous Ubuntu et Oracle Database 10g Express Edition Release 10.2.0.1.0.
- un serveur APEX2 sous Ubuntu et Oracle Database 11g Release 11.2.0.1.0 - 64bit.

J'ai sur PROD1 un DBLink vers APEX1 (DLAPEX1) et sur APEX1 un DBLink vers PROD1 (DLPROD1). Cela permet entre autre d'insérer
dans des tables de PROD1 des données qui se trouvent sur APEX1 (lors de traitement s'exécutant sur APEX1).

Pour faire cela, nous utilisons le code ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Sur APEX1 :
execute commande_directe@DLPROD1 ('insert into ma_table (column1) (select dossier from une_table@DLAPEX1)');
 
Code de la procédure commande_directe sur PROD1 :
create or replace
procedure commande_directe ( chaine in varchar2 )
is
 
begin
 
  execute immediate chaine;
 
end;
Cela fonctionne parfaitement entre PROD1 et APEX1. Le problème est que le serveur APEX1 va être remplacé par APEX2.
Si je reprends le principe de fonctionnement ci-dessus avec APEX2 à la place de APEX1 (mise à jour des DBLink, ...), j'obtiens l'erreur suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Erreur commençant à la ligne 1 de la commande :
execute sic_commande_directe@DLPROD1 ('insert into olivier (column1) (select dossier from sic_al@DLAPEX2)')
Rapport d'erreur :
ORA-04052: erreurs lors de la consultation de l'objet distant S9881_GL_00.SIC_COMMANDE_DIRECTE@DLPROD1
ORA-00604: une erreur s'est produite au niveau SQL récursif 1
ORA-06544: PL/SQL: internal error, arguments: [55916], [], [], [], [], [], [], []
ORA-06553: PLS-801: internal error [55916]
ORA-02063: précédant 2 lines de DLPROD1
De ce que j'ai compris, il s'agit d'une incompatibilité entre Oracle 10 et Oracle 11.

De fait, je suis à la recherche d'une solution me permettant d'exécuter depuis un serveur 11G une commande qui ordonnera à un serveur 10G d'ajouter (ou insérer, ...)
des données du serveur 11G. Pouvez-vous m'aider ?

Merci,