La risposta dipende dal fatto che tu stia parlando di una colonna in una tabella di database o di una variabile in un programma PL/SQL.
Colonna del database
La quantità di spazio di archiviazione utilizzata è proporzionale alla dimensione dei dati archiviati.
Variabile PL/SQL
Se la variabile viene dichiarata con una dimensione compresa tra 1 e 4000 (11g+) / 1999 (10g o precedente), la memoria verrà allocata per la lunghezza massima (ad es. VARCHAR2(100) richiederà almeno 100 byte di memoria).
Se la variabile è dichiarata con una dimensione 4001 (11g+) / 2000 (10g o precedente) o superiore, la memoria verrà allocata in base alla dimensione dei dati memorizzati. (un'interessante domanda a margine sarebbe, se il valore della variabile viene modificato, come viene ridimensionata la memoria:rialloca un altro buffer con la nuova dimensione?)
Riferimento per 10g:tipi di dati PL/SQL
Le piccole variabili VARCHAR2 sono ottimizzate per le prestazioni e quelle più grandi sono ottimizzate per un uso efficiente della memoria. Il punto di interruzione è 2000 byte. Per un VARCHAR2 di 2000 byte o più, PL/SQL alloca dinamicamente solo memoria sufficiente per contenere il valore effettivo. Per una variabile VARCHAR2 inferiore a 2000 byte, PL/SQL prealloca l'intera lunghezza dichiarata della variabile. Ad esempio, se si assegna lo stesso valore di 500 byte a una variabile VARCHAR2(2000 BYTE) ea una variabile VARCHAR2(1999 BYTE), la prima occupa 500 byte e la seconda occupa 1999 byte.
Riferimento per 11g:evitare il sovraccarico di memoria nel codice PL/SQL
Specifica una dimensione di più più di 4000 caratteri per la variabile VARCHAR2; PL/SQL attende fino a quando non assegni la variabile, quindi alloca solo lo spazio di archiviazione necessario