A given STEP in a JCL can execute a program directly (second line from your post) or can call a procedure (fourth line from you post) - this will execute one or more programs. Statement, which supplies
the job step program/procedure information is the EXEC statement.
Said that, at EXEC statement you as a programmer, can provide required information for the program/procedure being executed in that job step. Parameters coded in this statement can pass data to the program in execution (second line from your post), can override certain parameters of JOB statement and can pass parameters to the procedure if the EXEC statement calls a procedure (fourth line from your post) instead of directly executing a program.
So in short, first EXEC from your post is for a program while the second one is for PROCedure.
Please go through this IBM document, it might help you further: https://www.ibm.com/support/knowledgece ... execst.htm