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
fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT COUNT(*) FROM UneTableDeSchem2
en PL/SQL
avec un bloc anonyme
cela fonctionne
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
dans un OBJET stocké now
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 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
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
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
Partager