Câu trả lời phụ thuộc vào việc bạn đang nói về một cột trong bảng cơ sở dữ liệu hay một biến trong chương trình PL / SQL.
Cột cơ sở dữ liệu
Dung lượng lưu trữ được sử dụng tương ứng với kích thước của dữ liệu được lưu trữ.
Biến PL / SQL
Nếu biến được khai báo với kích thước từ 1 đến 4000 (11g +) / 1999 (10g hoặc sớm hơn), bộ nhớ sẽ được cấp cho độ dài tối đa (tức là VARCHAR2 (100) sẽ yêu cầu ít nhất 100 byte bộ nhớ).
Nếu biến được khai báo với kích thước 4001 (11g +) / 2000 (10g trở lên) hoặc lớn hơn, bộ nhớ sẽ được cấp phát theo kích thước của dữ liệu được lưu trữ. (một câu hỏi phụ thú vị sẽ là, nếu giá trị của biến bị thay đổi, bộ nhớ được thay đổi kích thước như thế nào - nó có phân bổ lại bộ đệm khác với kích thước mới không?)
Tham chiếu cho 10g:PL / SQL Datatypes
Các biến VARCHAR2 nhỏ được tối ưu hóa cho hiệu suất và các biến lớn hơn được tối ưu hóa để sử dụng bộ nhớ hiệu quả. Điểm cắt là 2000 byte. Đối với VARCHAR2 có kích thước 2000 byte trở lên, PL / SQL chỉ cấp phát động đủ bộ nhớ để giữ giá trị thực. Đối với biến VARCHAR2 ngắn hơn 2000 byte, PL / SQL sẽ phân bổ trước độ dài được khai báo đầy đủ của biến. Ví dụ:nếu bạn gán cùng một giá trị 500 byte cho biến VARCHAR2 (2000 BYTE) và cho biến VARCHAR2 (1999 BYTE), thì biến trước chiếm 500 byte và biến sau chiếm 1999 byte.
Tham khảo cho 11g:Tránh phí bộ nhớ trong mã PL / SQL
Chỉ định kích thước hơn nữa hơn 4000 ký tự cho biến VARCHAR2; PL / SQL đợi cho đến khi bạn chỉ định biến, sau đó chỉ phân bổ dung lượng lưu trữ nếu cần