The authorization identifier which wishes to execute a routine (procedure or a User Defined Function (UDF)) requires the EXECUTE-privilege for this routine.
To execute a routine it is not necessary to have the various table or column privileges which are required to execute the DML statements contained in the routine.
The authorization identifier which generates the routine automatically receives the EXECUTE privilege for this routine.
The authorization identifier must have the EXECUTE privilege for the routines called directly in the routine. It must also, for all tables and columns which are addressed in the routine, have the privileges which are required to execute the DML statements contained in the routine.
If it even has authorization to pass on the relevant privileges, it may also pass on and subsequently revoke the EXECUTE privilege to or from other authorization identifiers.