Well...you can implement this functionality this way I think.
SQL> CREATE USER abc IDENTIFIED BY abc;
User created.
SQL> GRANT DBA, resource, CREATE SESSION TO abc;
Grant succeeded.
SQL> conn abc/abc
Connected.
SQL> CREATE TABLE test
2 (a NUMBER);
Table created.
SQL> CREATE TABLE test1
2 (a NUMBER);
Table created.
SQL> CREATE OR REPLACE PACKAGE pkg_insert AS
2 PROCEDURE ins_test;
3 PROCEDURE ins_test1;
4 END;
5 /
Package created.
SQL> CREATE OR REPLACE PACKAGE BODY pkg_insert AS
2 PROCEDURE ins_test IS
3 BEGIN
4 INSERT INTO test
5 VALUES(1);
6 END;
7 PROCEDURE ins_test1 IS
8 BEGIN
9 INSERT INTO test1
10 VALUES(2);
11 END;
12 END;
13 /
Package body created.
SQL> CREATE ROLA manager;
CREATE ROLA manager
*
ERROR at line 1:
ORA-00901: invalid CREATE command
SQL> CREATE ROLE manager;
Role created.
SQL> GRANT EXECUTE ON pkg_insert TO manager;
Grant succeeded.
SQL> CREATE USER xyz IDENTIFIED BY xyz;
User created.
SQL> GRANT CREATE SESSION TO xyz;
Grant succeeded.
SQL> GRANT manager TO xyz;
Grant succeeded.
SQL> SELECT * FROM test;
no rows selected
SQL> SELECT * FROM test1;
no rows selected
SQL> conn xyz/xyz
Connected.
SQL> EXEC abc.pkg_insert.ins_test
PL/SQL procedure successfully completed.
SQL> EXEC abc.pkg_insert.ins_test1
PL/SQL procedure successfully completed.
SQL> SELECT * FROM abc.test
2 ;
SELECT * FROM abc.test
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn abc/abc
Connected.
SQL> SELECT * FROM test;
A
---------
1
SQL> SELECT * FROM test1;
A
---------
2
SQL> conn xyz/xyz
Connected.
SQL> INSERT INTO abc.test
2 VALUES (2);
INSERT INTO abc.test
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn system
Enter password: ******
Connected.
SQL> DROP USER abc CASCADE;
User dropped.
SQL> conn xyz/xyz
Connected.
SQL> EXEC abc.pkg_insert.ins_test1
BEGIN abc.pkg_insert.ins_test1; END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'ABC.PKG_INSERT' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
SQL> conn system
Enter password: ******
Connected.
SQL> DROP USER xyz CASCADE;
User dropped.