Отговорът зависи от това дали говорите за колона в таблица на база данни или променлива в PL/SQL програма.
Колона на базата данни
Използваното количество памет е пропорционално на размера на съхраняваните данни.
PL/SQL променлива
Ако променливата е декларирана с размер от 1 до 4000 (11g+) / 1999 (10g или по-рано), паметта ще бъде разпределена за максималната дължина (т.е. VARCHAR2(100) ще изисква поне 100 байта памет).
Ако променливата е декларирана с размер 4001 (11g+) / 2000 (10g или по-ранен) или по-голям, паметта ще бъде разпределена според размера на съхраняваните данни. (интересен страничен въпрос би бил, ако стойността на променливата се промени, как се преоразмерява паметта - преразпределя ли друг буфер с новия размер?)
Справка за 10g:PL/SQL типове данни
Малките VARCHAR2 променливи са оптимизирани за производителност, а по-големите са оптимизирани за ефективно използване на паметта. Точката на прекъсване е 2000 байта. За VARCHAR2, който е 2000 байта или повече, PL/SQL динамично разпределя само достатъчно памет, за да задържи действителната стойност. За променлива VARCHAR2, която е по-къса от 2000 байта, PL/SQL предварително разпределя пълната декларирана дължина на променливата. Например, ако присвоите една и съща стойност от 500 байта на променлива VARCHAR2(2000 BYTE) и на променлива VARCHAR2(1999 BYTE), първата заема 500 байта, а втората – 1999 байта.
Справка за 11g:Избягване на излишните разходи за памет в PL/SQL код
Посочете размер още над 4000 знака за променливата VARCHAR2; PL/SQL изчаква, докато присвоите променливата, след което разпределя само толкова място за съхранение, колкото е необходимо