Question

Is there any drawback (except allowing the value or array to grow too large) to setting the max integer size of a VARCHAR or VARRAY to a value significantly larger than actually necessary (or setting it to the max size allowed)?

Was it helpful?

Solution

If you're talking about a column in a database table, it is advisable to set the maximum length of a VARCHAR2 to the minimum length allowable by the requirements - like any other constraint, it helps to use these inbuilt features of the database to ensure only valid data gets saved (e.g. if a surname with 1000 characters is input I'm pretty sure that will be wrong, and perhaps highlight a bug in a program somewhere).

On the PL/SQL side, it may interest you to know that there may be memory (PGA) usage differences depending what size you declare your strings in your PL/SQL programs. Internally, there is a threshold at 2000 bytes, where the PL/SQL engine switches between two different memory allocation schemes. e.g. the following declaration:

DECLARE v VARCHAR2(2000); BEGIN...

will allocate 2000 bytes in the user's memory area, whereas:

DECLARE v VARCHAR2(2001); BEGIN...

will only allocate memory when a value is assigned, and will only allocate as much memory as is required to hold the value assigned to it.

Oracle forum: "VARCHAR2 space allocation"

OTHER TIPS

Just don't use varray, use nested table. Nested tables can hold an arbitry number of elements.

Using varchar2(4000) instead of varchar2(20) in a table definition doesn't really hurt because Oracle doesn't claim this space when it isn't needed.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top