why cant i use this i a procedure?

look at example...

SQL> EXEC dbms_shared_pool.keep('PYRADIA.GPR_GENERAL','P');

PL/SQL procedure successfully completed.
Works fine!

SQL> BEGIN
2 dbms_shared_pool.keep('PYRADIA.GPR_GENERAL','P');
3 END;
4 /

PL/SQL procedure successfully completed.

Works fine!

SQL> CREATE OR REPLACE PROCEDURE TEST AS
2 BEGIN
3 dbms_shared_pool.keep('PYRADIA.GPR_GENERAL','P');
4 END;
5 /

Procedure created.

SQL> EXECUTE TEST;
BEGIN TEST; END;

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_UTILITY", line 68
ORA-06512: at "SYS.DBMS_SHARED_POOL", line 45
ORA-06512: at "SYS.DBMS_SHARED_POOL", line 53
ORA-06512: at "SYS.TEST", line 3
ORA-06512: at line 1

Dont work...