Bonjour,

j'ai cette fonction de déclarée dans SCHEMA_1 :

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
18
19
20
21
22
23
 
create or replace FUNCTION F_NbInvalid RETURN NUMBER
  IS
    i_NbInvalid     NUMBER := 0;
 
    CURSOR c_InvalidItem IS
    SELECT OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS
      FROM ALL_OBJECTS
     WHERE OBJECT_TYPE IN ('SYNONYM','TRIGGER','FUNCTION','PROCEDURE','PACKAGE','PACKAGE BODY','VIEW', 'MATERIALIZED VIEW')
       AND STATUS         = 'INVALID'
       AND OWNER          in ('SCHEMA_1','SCHEMA_2')
     ORDER BY  owner , OBJECT_ID DESC;
  BEGIN
 
    FOR cur IN c_InvalidItem LOOP
      i_NbInvalid := i_NbInvalid+1;
    END LOOP;
 
    RETURN i_NbInvalid;
 
  EXCEPTION
    WHEN OTHERS THEN RETURN -1;
  END F_NbInvalid;

le but etant de lister les objects invalides afin de les recompiler.

Connecté en SCHEMA_1, si j'appelle la fonction, les objets invalides de SCHEMA_2 ne sont pas pris en compte.
Toujours connecté en SCHEMA_1, si j'execute seulement le select, les objets invalides de SCHEMA_2 sont bien selectionnés.
Et le dernier test : connecté en SYS, la fonction prend bien en compte les objets de SCHEMA_2

Il doit manquer un droit sur SCHEMA_1, mais je ne vois pas lequel.
Donc si qqun a une idée ...