Qual è la differenza tra i due? In entrambi i casi? cosa succede ai privilegi concessi su questa funzione? Vengono automaticamente revocati in entrambi i casi e devono essere nuovamente forniti durante la ricreazione? Si prega di spiegare.creare o sostituire v/s Eliminazione di una funzione e ricrearlo
6
A
risposta
14
Quando un oggetto viene rilasciato, anche tutti gli elementi associati vengono eliminati, inclusi i privilegi. Questo non è vero per CREATE OR REPLACE.
SQL> create procedure p1 is
2 begin
3 null;
4 end;
5/
Procedure created.
SQL> grant execute on p1 to xyz;
Grant succeeded.
SQL> select * from user_tab_privs_made
2/
GRANTEE TABLE_NAME GRANTOR PRIVILEGE GRA HIE
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
XYZ P1 APC EXECUTE NO NO
SQL> create or replace procedure p1 is
2 n pls_integer;
3 begin
4 n := 1;
5 end;
6/
Procedure created.
SQL> select * from user_tab_privs_made
2/
GRANTEE TABLE_NAME GRANTOR PRIVILEGE GRA HIE
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
XYZ P1 APC EXECUTE NO NO
SQL> drop procedure p1;
Procedure dropped.
SQL> create or replace procedure p1 (p in out pls_integer) is
2 begin
3 p := p+1;
4 end;
5/
Procedure created.
SQL> select * from user_tab_privs_made
2/
no rows selected
SQL>
4
Credo che se si sostituisce una funzione, i privilegi rimangono intatti, anche se io di solito piace creare sinonimi pubblici e privilegi concedere a quelli.
Replace è una parola chiave opzionale utilizzato in definizioni di oggetti (DDL) per sostituzione della definizione objet vecchio con uno nuovo. Conserva i privilegi di accesso dell'oggetto durante la procedura di modifica delle definizioni . Se l'oggetto viene eliminato e ricreato, tuttavia, i suoi privilegi sono persi.
Potrebbe non essere corretto ma la cronologia di controllo è stata mantenuta anche? – Rob