Bonjour à tous,

RDBMS 9.2.0.7

dans le genre bug qui va bien me prendre la tete.
Soit 2 schémas, SCHEM1, SCHEM2
SCHEM1 accède aux tables de SCHEM2 sans problèmes (j'ai créé un RULE spécifique avec autorisations de SELECTION et REFERENCES + publics synonymes)

A ce stade, sous SQL*Plus
sous SCHEM1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT COUNT(*) FROM UneTableDeSchem2
fonctionne

en PL/SQL
avec un bloc anonyme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SQL> DECLARE
  2    FMyResult INTEGER;
  3  BEGIN
  4     EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM UneTableDeSchem2 ' INTO FMyResult;
  5     DBMS_OUTPUT.PUT_LINE(TO_CHAR(FMyResult));
  6  END;
  7  /
560
cela fonctionne

dans un OBJET stocké now
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE FUNCTION MyTest2 RETURN INTEGER
IS
  FMyResult INTEGER;
BEGIN
   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM UneTableDeSchem2 ' INTO FMyResult;
   DBMS_OUTPUT.PUT_LINE(TO_CHAR(FMyResult));
   RETURN FMyResult;
END;
 
Fonction créée.
 
SQL> SELECT MyTest2 FROM DUAL;
SELECT MyTest2 FROM DUAL
       *
ERREUR à la ligne 1 :
ORA-00942: Table ou vue inexistante
ORA-06512: à "DEV.MYTEST2", ligne 5
j'ai alors tenter de modifier ma simple fonction en préfixant le nom de la table par le nom du user

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE FUNCTION MyTest2 RETURN INTEGER
IS
  FMyResult INTEGER;
BEGIN
   EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM SCHEM2.UneTableDeSchem2 ' INTO FMyResult;
   DBMS_OUTPUT.PUT_LINE(TO_CHAR(FMyResult));
   RETURN FMyResult;
END;

Fonction créée.

SQL> SELECT MyTest2 FROM DUAL;
SELECT MyTest2 FROM DUAL
       *
ERREUR à la ligne 1 :
ORA-00942: Table ou vue inexistante
ORA-06512: à "DEV.MYTEST2", ligne 5
Conclusion
Dés que cherche dans un objet stocké avec un EXECUTE IMMEDIATE à faire appel à une table d'un autre schéma je me fais jeter à l'exécution, la compilation passe sans problémes.

et là je suis confronté à une vrai tuile car je dois à tout prix réussir dans des packages PL/SQL à faire des références à des tables de plusieurs schémas applicatifs.

une idée ?
nota : je rappel ce comportement a lieu sur la release 9.2.0.7
Merci de votre aide