Odpowiedź zależy od tego, czy mówisz o kolumnie w tabeli bazy danych, czy zmiennej w programie PL/SQL.
Kolumna bazy danych
Ilość używanej pamięci jest proporcjonalna do rozmiaru przechowywanych danych.
Zmienna PL/SQL
Jeśli zmienna jest zadeklarowana z rozmiarem od 1 do 4000 (11g+) / 1999 (10g lub wcześniej), pamięć zostanie przydzielona na maksymalną długość (tj. VARCHAR2(100) będzie wymagał co najmniej 100 bajtów pamięci).
Jeśli zmienna jest zadeklarowana w rozmiarze 4001 (11g+) / 2000 (10g lub starszym) lub większym, pamięć zostanie przydzielona zgodnie z rozmiarem przechowywanych danych. (ciekawe pytanie poboczne mogłoby brzmieć, jeśli zmieni się wartość zmiennej, w jaki sposób zmieni się rozmiar pamięci - czy przydzieli inny bufor z nowym rozmiarem?)
Odniesienie do 10g:Typy danych PL/SQL
Małe zmienne VARCHAR2 są zoptymalizowane pod kątem wydajności, a większe są zoptymalizowane pod kątem efektywnego wykorzystania pamięci. Punkt odcięcia to 2000 bajtów. W przypadku VARCHAR2, który ma 2000 bajtów lub więcej, PL/SQL dynamicznie przydziela tylko tyle pamięci, aby pomieścić rzeczywistą wartość. W przypadku zmiennej VARCHAR2, która jest krótsza niż 2000 bajtów, PL/SQL wstępnie przydziela pełną zadeklarowaną długość zmiennej. Na przykład, jeśli przypiszesz tę samą 500-bajtową wartość do zmiennej VARCHAR2(2000 BYTE) i do zmiennej VARCHAR2(1999 BYTE), ta pierwsza zajmie 500 bajtów, a druga 1999 bajtów.
Odniesienie do 11g:Unikanie narzutu pamięci w kodzie PL/SQL
Określ rozmiar więcej ponad 4000 znaków dla zmiennej VARCHAR2; PL/SQL czeka, aż przypiszesz zmienną, a następnie alokuje tylko tyle miejsca, ile potrzeba