La réponse varie selon que vous parlez d'une colonne dans une table de base de données ou d'une variable dans un programme PL/SQL.
Colonne de base de données
La quantité de stockage utilisée est proportionnelle à la taille des données stockées.
Variable PL/SQL
Si la variable est déclarée avec une taille de 1 à 4000 (11g+) / 1999 (10g ou plus tôt), la mémoire sera allouée pour la longueur maximale (c'est-à-dire que VARCHAR2(100) nécessitera au moins 100 octets de mémoire).
Si la variable est déclarée avec une taille 4001 (11g+) / 2000 (10g ou antérieure) ou supérieure, la mémoire sera allouée en fonction de la taille des données stockées. (une question secondaire intéressante serait, si la valeur de la variable est modifiée, comment la mémoire est-elle redimensionnée - réalloue-t-elle un autre tampon avec la nouvelle taille ?)
Référence pour 10g :Types de données PL/SQL
Les petites variables VARCHAR2 sont optimisées pour les performances, et les plus grandes sont optimisées pour une utilisation efficace de la mémoire. Le point de coupure est de 2000 octets. Pour un VARCHAR2 de 2 000 octets ou plus, PL/SQL alloue dynamiquement juste assez de mémoire pour contenir la valeur réelle. Pour une variable VARCHAR2 inférieure à 2 000 octets, PL/SQL préalloue la longueur totale déclarée de la variable. Par exemple, si vous affectez la même valeur de 500 octets à une variable VARCHAR2(2000 BYTE) et à une variable VARCHAR2(1999 BYTE), la première occupe 500 octets et la seconde 1999 octets.
Référence pour 11g :Éviter la surcharge de mémoire dans le code PL/SQL
Spécifiez une taille de plus plus de 4000 caractères pour la variable VARCHAR2 ; PL/SQL attend que vous affectiez la variable, puis n'alloue que la quantité de stockage nécessaire