Jawabannya tergantung pada apakah Anda sedang berbicara tentang kolom dalam tabel database, atau variabel dalam program PL/SQL.
Kolom basis data
Jumlah penyimpanan yang digunakan sebanding dengan ukuran data yang disimpan.
Variabel PL/SQL
Jika variabel dideklarasikan dengan ukuran 1 hingga 4000 (11g+) / 1999 (10g atau sebelumnya), memori akan dialokasikan untuk panjang maksimum (yaitu VARCHAR2(100) akan membutuhkan setidaknya 100 byte memori).
Jika variabel dideklarasikan dengan ukuran 4001 (11g+) / 2000 (10g atau sebelumnya) atau lebih besar, memori akan dialokasikan sesuai dengan ukuran data yang disimpan. (pertanyaan sampingan yang menarik adalah, jika nilai variabel diubah, bagaimana ukuran memori diubah - apakah itu mengalokasikan kembali buffer lain dengan ukuran baru?)
Referensi untuk 10g:Tipe Data PL/SQL
Variabel VARCHAR2 kecil dioptimalkan untuk kinerja, dan variabel yang lebih besar dioptimalkan untuk penggunaan memori yang efisien. Titik potongnya adalah 2000 byte. Untuk VARCHAR2 yang 2000 byte atau lebih, PL/SQL secara dinamis mengalokasikan hanya cukup memori untuk menyimpan nilai sebenarnya. Untuk variabel VARCHAR2 yang lebih pendek dari 2000 byte, PL/SQL mengalokasikan terlebih dahulu panjang variabel yang dideklarasikan. Misalnya, jika Anda menetapkan nilai 500 byte yang sama ke variabel VARCHAR2(2000 BYTE) dan ke variabel VARCHAR2(1999 BYTE), yang pertama membutuhkan 500 byte dan yang terakhir membutuhkan 1999 byte.
Referensi untuk 11g:Menghindari Overhead Memori dalam Kode PL/SQL
Tentukan ukuran lebih dari 4000 karakter untuk variabel VARCHAR2; PL/SQL menunggu hingga Anda menetapkan variabel, lalu hanya mengalokasikan penyimpanan sebanyak yang diperlukan