Các ký tự nhiều byte đã khiến tôi rất đau.CHỌN càng nhiều dữ liệu từ CLOB đến VARCHAR2 càng tốt, với các ký tự nhiều byte trong dữ liệu
Bất kỳ đề xuất nào về vấn đề này?
Tôi có một trường CLOB rằng sức chứa một số ký tự nhiều byte, và tôi cần phải lựa chọn trong SQL và chuyển đổi lĩnh vực này thành một chuỗi cho quá trình hạ nguồn, hiện tại tôi đang sử dụng:
SELECT DBMS_LOB.SUBSTR(description, 4000, 1) FROM table
Nhưng lệnh 4000 ở trên có chiều dài ký tự thay vì byte. Vì vậy, tôi đã phải thay đổi đến 3000 để xử lý bất kỳ ký tự nhiều byte có thể đã len lỏi vào dữ liệu khác kích thước bộ đệm lỗi sẽ xảy ra.
Sự cố này dành cho các bản ghi không chứa ký tự nhiều byte, có thể cắt bớt dữ liệu không cần thiết nhiều hơn mức cần thiết. (. Các 4000 là giới hạn chuỗi, chúng ta có thể/phải sống với điều đó)
Có cách nào để làm điều gì đó trong tương đương với:
SELECT DBMS_LOB.SUBSTR(description, 4000bytes, 1) FROM table
Bằng cách đó tôi có thể nhận được dữ liệu càng nhiều ra càng tốt.
Lưu ý: Tôi không được phép để tạo bảng temp/quan điểm, không sử dụng PL/SQL, chỉ SQL SELECT ...
nên không có được "... với SUBSTRB"? (SUBSTRB thay vì SUBSTR) –
Không quan tâm: Bạn có biết điều gì xảy ra nếu 3999 ký tự đầu tiên dài một byte và ký tự thứ 4000 là một byte nhiều byte không? Nó sẽ không trả về một nhân vật sai ở vị trí 4000 (vì nó diễn giải byte đầu tiên của char nhiều byte thành char đơn)? –
Không có Jeffery nó sẽ không hoạt động, nếu 'mô tả' chứa các ký tự nhiều byte, thì DBMS_LOB.SUBSTR bên trong đã nhấn một lỗi bộ đệm chuỗi trước khi nó tới SUBSTRB. – alchn