Folosesc oracle și vreau să creez un index pe o anumită tabelă aparține unui alt utilizator, deci cum acord privilegiul de a face acest lucru fără a utiliza requete
grant create any index
- Nu poți cere proprietarului să creeze indexul? – > Por jarlh.
- Nu, a trebuit să creez un index de la un alt utilizator. > Por Djaballah DJEDID.
grant index on [tablename] to [user]
Ce privilegii trebuie să aibă proprietarul tabelului însuși pentru a i se permite să acorde crearea unui index pe un tabel unui alt utilizator va depinde de versiunea dvs. de Oracle; verificați documentația.
- asta nu a funcționat, am avut mesajul de eroare privilegiu lipsă sau invalid. folosesc oracle 10g – > .
- Greșeala mea, am avut o sintaxă greșită. Fixat acum – am șters cuvântul „create”. Vă rog să-mi spuneți dacă funcționează acum. – > .
Dacă doriți să creați un index pentru o tabelă dintr-o altă schemă, mai întâi trebuie să acordați privilegiul de sistem utilizatorului pe care doriți să îl utilizați pentru a crea indexul.
Pentru a crea un index într-o altă schemă, trebuie să aveți privilegiul de sistem CREATE ANY INDEX.
Mai multe referințe: https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5010.htm
Iată SQL:
/*No tested*/
Grant create any index to user;
Crearea unei proceduri în schema proprietarului tabelului
create or replace
procedure create_index(col_list varchar2, index_name varchar2) as
begin
execute immediate 'create index ' || index_name || ' on ' || 'PUT_TABLENAME_HERE'|| '(' || col_list || ')';
end;
GRANT EXECUTE ON table_owner.create_index TO user;
Se apelează
begin
table_owner.create_index('ID','IDX1');
end;
Cred că ar trebui să funcționeze.