2012-04-30 27 views
6

Tôi có một DB2 (9.5.1) Bảng được định nghĩa như sau:DB2 đưa một CLOB lớn (> 32KB) vào văn bản?

CREATE TABLE MY_TABLE 
( 
    ID INTEGER DEFAULT 0 NOT NULL, 
    TEXT CLOB(104857600), 
    PRIMARY KEY (ID) 
); 

Bây giờ nếu tôi muốn truy vấn chuỗi văn bản thực tế được lưu trữ trong các CLOB tôi làm điều đó theo cách này:

select cast(t.TEXT as varchar(32000)) 
    from MY_TABLE t 
    where t.ID = 1; 

vấn đề bây giờ là văn bản của tôi bị cắt, nhưng đối với một varchar độ dài tối đa là 32KB, vì vậy truy vấn này không thành công:

select cast(t.TEXT as varchar(33000)) 
    from MY_TABLE t 
where t.ID = 1; 

Có khả năng nào khác để tôi có thể truy xuất toàn bộ nội dung của CLOB dưới dạng đầu ra văn bản không?

Peter

Trả lời

2

Trong tình huống tương tự, nơi tôi đã phải lấy dữ liệu xml, điều này làm việc cho tôi

select my_id, cast(xmlserialize(my_column as clob(1m)) as varchar(20000)) from schema.my_table where my_id = 463 

trước đó tôi đã có thể làm điều này trong sóc sql mà không CAST nhưng phiên bản mới nhất tôi đã sử dụng dàn diễn viên

+2

Nhưng bạn truyền tới VARCHAR (20000) trên đường đi. Làm thế nào điều này xử lý varchars có kích thước là> 32k? – Beryllium

1

Theo như tôi biết không có cách nào để vượt qua giới hạn 32k, nếu bạn sử dụng nó trong SQL, hãy chọn như bạn đã mô tả.

Nếu bạn sử dụng JDBC để truy xuất dữ liệu của bạn, thay vì sử dụng getString() trên tập kết quả, bạn sẽ có được một CLOB xử lý, và từ đó bạn có thể nhận được một dòng.

Mặt khác, nó thực sự là một giới hạn? Bạn có thực sự sử dụng CLOBs ở đâu không? RDBMS được tối ưu hóa cho các kích thước hàng nhỏ hơn để được xử lý trong các giao dịch hiệu quả.

Nói chung, truyền trực tuyến dữ liệu. Xem xét thiết kế lại mô hình dữ liệu của bạn, nếu CLOB này chứa dữ liệu có thể được chia thành nhiều cột và bạn cần một số dữ liệu của nó trong truy vấn của bạn (trong đó ..., theo thứ tự ... v.v.).

7

Tôi tìm thấy nơi này trên web và nghĩ rằng tôi sẽ chia sẻ khi thấy nó hoạt động xung quanh giới hạn 32k.

SELECT 
    XMLCAST (
    XMLPARSE (
     DOCUMENT CAST (
     MY_CLOB_DATA AS BLOB 
    ) 
     PRESERVE WHITESPACE 
    ) as XML 
) 
FROM 
MY_TABLE 
WHERE ID = 1 
+0

Tôi cần chuyển đổi BLOB thành XML, điều này làm việc như một sự quyến rũ cảm ơn rất nhiều! – WannaGetHigh