what is the exact difference between plan & package
A plan can have any no of DBRMs while a Package is always bound from a single DBRM.
I know that package is non executable.
Yes, You are right. You must create a Plan which contains the Package. (A Plan can also hold packages).
In which cases bind package is advantages
It's recommended to create packages, when you have to modify the SQL statements in your applications or database tables that are accessed by your programs. So it's enough to REBIND the corresponding package, instead of the entire PLAN.
Advantages of Packages over Plan:
1. When you use packages, you do not need to bind the entire plan again when you change one SQL statement. You need to bind only the package associated with the changed SQL statement.
2. Binding packages into package collections allows you to add packages to an existing application plan without having to bind the entire plan
again. A collection is a group of associated packages. If you include a collection name in the package list when you bind a plan, any package in the collection becomes available to the plan. The collection can even be empty when you first bind the plan. Later, you can add packages to the collection, and drop or replace existing packages, without binding the plan again.
3. Maintaining several versions of a plan without using packages requires a separate plan for each version, and therefore separate plan names and RUN commands. Isolating separate versions of a program into packages requires only one plan and helps to simplify program migration and fallback. For example, you can maintain separate development, test, and
production levels of a program by binding each level of the program as a separate version of a package, all within a single plan.
4. The options of BIND PLAN apply to all DBRMs bound directly to the plan. The options of BIND PACKAGE apply only to the single DBRM bound to that package. The package options need not all be the same as the plan options, and they need not be the same as the options for other packages used by the same plan.
5. You can use a bind option to name a qualifier for the unqualified object names in SQL statements in a plan or package. By using packages, you can use different qualifiers for SQL statements in different parts of your application. By rebinding, you can redirect your SQL statements, for example, from a test table to a production table.