Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

12c VARCHAR2 (32767)

Tôi luôn thắc mắc tại sao loại dữ liệu VARCHAR2 bị giới hạn ở quá ít ký tự. Đối với hầu hết các thuộc tính, bạn không cần nhiều hơn 2.000 byte. Tôi nhớ khi Oracle tăng giới hạn từ 2.000 byte lên 4.000. Nhưng SQL Server 2008R2 cho phép bạn sử dụng 8.000. Chúng ta đang nói về dữ liệu ký tự và giới hạn 2.000 hoặc 4.000 byte đối với tôi dường như là tùy ý. Bây giờ trong Oracle 12c, bạn có thể sử dụng VARCHAR2 (32767) cho tối đa 32KB. Nhưng trước khi bạn có thể sử dụng tính năng mới này, bạn cần phải thực hiện một chút công việc. Nếu không, bạn sẽ gặp lỗi.

SQL> create table test_tab (val varchar2(32000));
create table test_tab (val varchar2(32000))
                                    *
ERROR at line 1:
ORA-00910: specified length too long for its datatype

Oracle 12c bao gồm một tham số mới, MAX_STRING_SIZE kiểm soát mức độ lớn của kiểu dữ liệu VARCHAR2 của bạn. Tham số này có thể được đặt thành CHUẨN hoặc MỞ RỘNG. Mặc định là STANDARD giới hạn VARCHAR2 đến 4000 byte. Việc thay đổi thông số này thành tiêu chuẩn thành EXTENDED là chuyến đi một chiều. Bạn không thể hoàn nguyên trở lại. Để thực hiện thay đổi, bạn cần BẮT ĐẦU NÂNG CẤP phiên bản, sửa đổi tham số và chạy một tập lệnh.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup upgrade
ORACLE instance started.
Total System Global Area 1043886080 bytes
Fixed Size                  2296280 bytes
Variable Size             654313000 bytes
Database Buffers          381681664 bytes
Redo Buffers                5595136 bytes
Database mounted.
Database opened.
SQL> alter system set max_string_size=EXTENDED scope=both;
System altered.
SQL> @?/rdbms/admin/utl32k.sql

Quá trình này có thể mất một lúc để chạy. Sau khi hoàn tất, hãy trả lại phiên bản để mở như bình thường.

Bây giờ tôi có thể tạo một bảng với kiểu dữ liệu lớn hơn này.

SQL> create table test_tab (val varchar2(32000));
Table created.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật một bảng trong Oracle nếu bất kỳ giá trị trường nào là rỗng và xác định rằng cập nhật thành công

  2. Làm cách nào để tôi có thể sử dụng regex để chia một chuỗi, sử dụng một chuỗi làm dấu phân cách?

  3. Tại sao tôi dường như không thể buộc Oracle 11g tiêu thụ nhiều CPU hơn cho một truy vấn SQL duy nhất

  4. Xử lý dữ liệu hạt giống trong bản vá trực tuyến R12.2

  5. Cách giải quyết ORA-29913 với bảng bên ngoài