[EXECUTE IMMEDIATE] : accès aux tables de plusieurs schémas
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:
SELECT COUNT(*) FROM UneTableDeSchem2
fonctionne
en PL/SQL
avec un bloc anonyme
Code:
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:
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:
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