Package body is the initialization part of the package. It defines the queries for cursors and the code for subprograms included into the package. Procedure implementation details and private declarations are encapsulated in the package body and they are hidden from code outside the package.
Sometimes package body is unnecessary.
Subprograms defined in a package body are accessible outside the package only if their declarations are also present in the package specification. If a subprogram declaration is not included into the package specification, that subprogram can be called only by other subprograms in the same package.
PL/SQL allows two or more packaged subprograms to have the same name. This option is useful when you want a subprogram to accept similar sets of parameters that have different data types.