2009-06-19 62 views
11

Tôi có một ứng dụng sử dụng JMS op top của Oracle xếp hàng tiên tiến. Tôi muốn làm một truy vấn trên bảng xếp hàng cho thấy nội dung của thông báo (trong trường hợp của tôi là XML). Vì vậy, khi tôi thực hiện một 'user_data chọn từ [queue_table]' Tôi nhận được 'AQ SYS.AQ $ _JMS_TEXT_MESSAGE' làm phản hồi.

Có chức năng nào để nội dung của thông báo này có thể được hiển thị không? Cái gì đó như 'chọn FUNCTION (user_data) từ [queue_table]' hay cái gì đó?

Tôi googled, đã quét nhiều bài viết về xếp hàng Oracle, nhưng tôi không thể tìm thấy điều này. Tôi nghi ngờ có một cách đơn giản để làm điều này, nhưng tôi không thể tìm thấy nó.

Trả lời

10

Tôi cũng phải vật lộn với điều này. Tôi đã viết một câu trả lời ở đây: http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html.

Trân trọng, Rob.

+1

"select queue.user_data.text_vc từ hàng đợi [queue_table]" Tôi đã thêm câu trả lời ở đây, vì vậy tôi có thể quảng bá câu trả lời là giải pháp cho vấn đề và tôi muốn câu trả lời hoàn thành. –

+1

Tôi thấy rằng văn bản lớn hơn được lưu trữ trong queue.user_data.text_lob thay vì text_vc –

4

Vì vậy, tôi cho rằng nó nên là:

select queue.user_data.text_vc from [queue_table] queue 
+1

Chính xác. Bạn nên sử dụng một bí danh hoặc tên bảng chính nó ở phía trước của user_data.text_vc. Nếu không, nó bắt đầu tìm kiếm một gói user_data có chứa một hàm gọi là text_vc, dẫn đến thông báo lỗi ORA-00904: "USER_DATA". "TEXT_VC": mã định danh không hợp lệ –

0

Vui lòng thử lệnh sau:

chọn user_data từ [queue_table] Tên

+1

Câu hỏi đã được trả lời 2 năm trước. –

1

Những câu trả lời ở đây không xử lý hiển thị lớn hơn nội dung, được lưu trữ trong user_data.text_lob. Nếu nội dung là lớn hơn so với một số tiền nhất định của byte (4000?), text_vc sẽ null và bạn phải nhìn vào text_lob (đó sẽ là null khác)

Để hiển thị tất cả dữ liệu, bất kể đó là kích thước, bạn có thể sử dụng các truy vấn sau đây sử dụng nvl:

SELECT nvl(q.user_data.text_vc, q.user_data.text_lob) FROM [queue_table] q

tôi đoán bạn có thể (và nên xem xét đến) sử dụng coalesce thay vì nvl, bởi vì nó doesn't evaluate the second argument, nếu là người đầu tiên đã khác nhau để 0.123., nhưng tôi chưa thử nghiệm điều đó.

1

bổ sung những nhận xét của Stuxnet:

SELECT nvl(to_clob(q.user_data.text_vc), q.user_data.text_lob) FROM queue_table q; 

mà không to_clob bạn sẽ nhận được ORA-22.835 cho dữ liệu lớn hơn 4000 ký tự vì nó bảo không gian của đối số đầu tiên, đó là chỉ VARCHAR2.

Các vấn đề liên quan