Side issue: If you have PL/SQL variables that you plan to use for database values, use anchored datatypes (%ROWTYPE or %TYPE) instead of an explicit type/length e.g. lv_customer_name customer_table.customer_name%TYPE. This means (1) you can be sure any value you fetch into the variable will fit in it OK, and (2) if the column length changes you don't have to search through all your code to find the places where your code will break.
Also, for things like messages etc you might as well make your variables big enough for any reasonable value e.g. VARCHAR2(2000) or VARCHAR2(4000) - see the PL/SQL data types reference for your version of Oracle:
Oracle 10g:
Small VARCHAR2 variables are optimized for performance, and larger ones are optimized for efficient memory use. The cutoff point is 2000 bytes. For a VARCHAR2 that is 2000 bytes or longer, PL/SQL dynamically allocates only enough memory to hold the actual value. For a VARCHAR2 variable that is shorter than 2000 bytes, PL/SQL preallocates the full declared length of the variable. For example, if you assign the same 500-byte value to a VARCHAR2(2000 BYTE) variable and to a VARCHAR2(1999 BYTE) variable, the former takes up 500 bytes and the latter takes up 1999 bytes.
Oracle 11g:
Memory Allocation
For a CHAR variable, PL/SQL allocates at compile time enough memory for the maximum size.
For a VARCHAR2 variable, memory allocation depends on maximum size:
If the maximum size is less than 4,000 bytes, PL/SQL allocates at compile time enough memory for the maximum size.
If the maximum size is 4,000 bytes or more, PL/SQL allocates at run time enough memory for the actual value.
For example, suppose that variables a and b are declared as follows:
a VARCHAR2(3999);
b VARCHAR2(4000);
If you assign the same 500-byte value to both variables, PL/SQL allocates 3,999 bytes for a at compile time and 500 bytes for b at run time.
Thus, PL/SQL optimizes smaller VARCHAR2 variables for performance and larger ones for efficient memory use.