Я написал процедуру предоставления разрешений для всех таблиц конкретной схемы для оставления других схем.Как написать процедуру для выполнения множества запросов автоматически
create or replace PROCEDURE GRANTS_PROC
IS
CURSOR GRANTS_CURSOR
IS
SELECT 'GRANT SELECT, INSERT, UPDATE, DELETE ON "'
||T.OWNER
||'"."'
||TABLE_NAME
||'" TO '
||(SELECT rtrim(listagg(U.username||',')
within group (order by U.username),',') USERNAME
FROM ALL_USERS U
WHERE U.USERNAME!=T.OWNER
AND U.USERNAME IN
('AAA','BBB','CCC','DDD','EEE','FFF','GGG','HHH','III'))||';' FINAL_TXT
FROM ALL_TABLES T
WHERE T.OWNER IN
('AAA','BBB','CCC','DDD','EEE','FFF','GGG','HHH','III')
ORDER BY T.OWNER,UPPER(T.TABLE_NAME);
BEGIN
--DBMS_OUTPUT.PUT_LINE('CURSOR_GRANTS.FINAL_TXT');
--QRY_TEXT:='ABC';
FOR CURSOR_GRANTS IN GRANTS_CURSOR
LOOP
DBMS_OUTPUT.PUT_LINE(CURSOR_GRANTS.FINAL_TXT);
EXECUTE IMMEDIATE CURSOR_GRANTS.FINAL_TXT;
END LOOP;
END;
/
выше процедура компилируется успешно, но в то время как исполнение он не получает в FOR
цикл, чтобы запустить EXECUTE IMMEDIATE
блок, но процедура PL/SQL компилируется успешно.
Что можно сделать, чтобы исправить мою процедуру и заставить ее работать?
Если цикл 'FOR' не запущен, это связано с тем, что строки в' T.OWNER IN (... 'не являются пользователями с таблицами. Это выглядит как фиктивные данные, но убедитесь, что реальные данные находятся в –
Я просто изменил его на «aaa», «bbb» и т. д. Я дал существующие имена пользователей, даже тогда его не работает, а также в UPPERCASE –
Ли только запрос возвращает результаты? Также есть несколько опечаток в коде, например 'TXT' должно быть' FINAL_TXT'. –