Odpověď závisí na tom, zda mluvíte o sloupci v databázové tabulce nebo o proměnné v programu PL/SQL.
Sloupec databáze
Velikost použitého úložiště je úměrná velikosti uložených dat.
Proměnná PL/SQL
Pokud je proměnná deklarována s velikostí 1 až 4000 (11g+) / 1999 (10g nebo starší), paměť bude přidělena na maximální délku (tj. VARCHAR2(100) bude vyžadovat alespoň 100 bajtů paměti).
Pokud je proměnná deklarována s velikostí 4001 (11g+) / 2000 (10g nebo starší) nebo větší, bude paměť přidělena podle velikosti uložených dat. (zajímavá vedlejší otázka by byla, pokud se změní hodnota proměnné, jak se změní velikost paměti - přerozdělí to další vyrovnávací paměť s novou velikostí?)
Reference pro 10g:PL/SQL Datatypes
Malé proměnné VARCHAR2 jsou optimalizovány pro výkon a větší jsou optimalizovány pro efektivní využití paměti. Mezní bod je 2000 bajtů. Pro VARCHAR2, který má 2000 bajtů nebo více, PL/SQL dynamicky alokuje pouze dostatek paměti pro uložení skutečné hodnoty. Pro proměnnou VARCHAR2, která je kratší než 2000 bajtů, PL/SQL předem přidělí celou deklarovanou délku proměnné. Pokud například přiřadíte stejnou 500bajtovou hodnotu proměnné VARCHAR2(2000 BYTE) a proměnné VARCHAR2(1999 BYTE), první zabere 500 bajtů a druhá 1999 bajtů.
Referenční příručka pro 11g:Předcházení režii paměti v kódu PL/SQL
Zadejte velikost více více než 4000 znaků pro proměnnou VARCHAR2; PL/SQL čeká, dokud proměnnou nepřiřadíte, a poté přidělí pouze tolik úložiště, kolik je potřeba