Die Antwort hängt davon ab, ob es sich um eine Spalte in einer Datenbanktabelle oder eine Variable in einem PL/SQL-Programm handelt.
Datenbankspalte
Die verwendete Speichermenge ist proportional zur Größe der gespeicherten Daten.
PL/SQL-Variable
Wenn die Variable mit einer Größe von 1 bis 4000 (11g+) / 1999 (10g oder früher) deklariert wird, wird Speicher für die maximale Länge zugewiesen (d. h. VARCHAR2(100) benötigt mindestens 100 Byte Speicher).
Wenn die Variable mit einer Größe von 4001 (11 g+) / 2000 (10 g oder früher) oder größer deklariert wird, wird Speicher entsprechend der Größe der gespeicherten Daten zugewiesen. (Eine interessante Nebenfrage wäre, wenn der Wert der Variablen geändert wird, wie wird die Größe des Speichers geändert - wird ein anderer Puffer mit der neuen Größe neu zugewiesen?)
Referenz für 10g:PL/SQL-Datentypen
Kleine VARCHAR2-Variablen sind auf Leistung optimiert, größere auf effiziente Speichernutzung. Der Cutoff-Punkt liegt bei 2000 Bytes. Für einen VARCHAR2, der 2000 Byte oder länger ist, weist PL/SQL dynamisch nur genug Speicher zu, um den tatsächlichen Wert aufzunehmen. Für eine VARCHAR2-Variable, die kürzer als 2000 Byte ist, weist PL/SQL die volle deklarierte Länge der Variablen vorab zu. Wenn Sie beispielsweise einer VARCHAR2(2000 BYTE)-Variablen und einer VARCHAR2(1999 BYTE)-Variablen denselben 500-Byte-Wert zuweisen, belegt erstere 500 Bytes und letztere 1999 Bytes.
Referenz für 11g:Speicher-Overhead in PL/SQL-Code vermeiden
Geben Sie eine Größe von mehr an als 4000 Zeichen für die Variable VARCHAR2; PL/SQL wartet, bis Sie die Variable zuweisen, und weist dann nur so viel Speicherplatz wie nötig zu