Toekennen van Select privilege op alle tabellen in 1 schema.
Middels Procedure
Procedure aanmaken
CREATE PROCEDURE grant_select(
username VARCHAR2,
grantee VARCHAR2)
AS
BEGIN
FOR r IN (
SELECT owner, table_name
FROM all_tables
WHERE owner = 'username'
)
LOOP
EXECUTE IMMEDIATE
'GRANT SELECT ON '||r.owner||'.'||r.table_name||' to ' || grantee;
END LOOP;
END;
Uitvoeren procedure
EXEC grant_select('schemaowner','selectuser');
Middels 1 Query
Query 1
Deze lijkt te werken, Je krijgt wel een error, maar het lijkt wel uitgevoerd.
declare
cursor c1 is select table_name from user_tables;
cmd varchar2(200);
begin
for c in c1 loop
cmd := 'GRANT SELECT ON '||c.table_name||' to select_gim';
execute immediate cmd;
end loop;
end;
Query 2
Deze werkt ook met dezelfde foutmelding als de voorgaande, maar kan ook op bepaalde objecten van toepassing zijn.

Alleen voor de Tables.
BEGIN
FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='OWNER_GIM') LOOP
EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.table_name||' to SELECT_GIM';
END LOOP;
END;
Voor Views
BEGIN
FOR R IN (SELECT owner, view_name FROM all_views WHERE owner='OWNER_GIM') LOOP
EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.view_name||' to SELECT_GIM';
END LOOP;
END;