2010-11-11 23 views
10

Tôi có một kịch bản như thế này:Max chiều rộng cột trong Oracle ống chỉ nộp

SET ECHO OFF 
SET FEEDBACK OFF 
SET VERIFY OFF 
SET HEADING OFF 
SET TERMOUT OFF 
SET TRIMOUT ON 
SET TRIMSPOOL ON 
SET WRAP OFF 
SET LINESIZE 32000 
SET LONG 32000 
SET LONGCHUNKSIZE 32000 
SET SERVEROUT ON 

SPOOL C:\Export.txt 

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....))) 
    FROM --TABLENAME-- 
WHERE --CONDITIONS-- 

Kết quả phải là một tập tin có chứa một danh sách các hàng với xml phức tạp bên trong, nhưng khi chiều dài của XML tạo dài hơn 2000, SQLPlus cắt đến năm 2000 và chuyển sang dòng tiếp theo.

Có một cách để buộc SQLPlus viết tất cả dữ liệu trong cùng một dòng?

+1

Điều đó phải ổn. Bạn đang xem tệp gì - trình chỉnh sửa của bạn có giới hạn độ dài dòng không? Tôi tự hỏi nếu spool là thực sự OK nhưng nó chỉ trông cắt ngắn khi bạn cố gắng và xem nó. –

Trả lời

0

Làm thế nào về việc sử dụng getClobVal() để chuyển đổi đầu ra thành một nhánh?

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....))).getClobVal() 
    FROM --TABLENAME-- 
WHERE --CONDITIONS-- 
5

Chỉ cần thêm dòng sau ngay sau khi các lệnh SET:

COL ColumnName FORMAT A32000 

nơi ColumnName là một bí danh cho cột XML trong câu lệnh SELECT của bạn (bạn sẽ cần phải thêm một bí danh).

Điều này đặt độ rộng tối đa cho cột đó, là 2000 ký tự theo mặc định. Lưu ý rằng mặc dù bạn có thể đặt COL FORMAT cao tới 60000 ký tự, nhưng bạn sẽ thực sự nhận được một dòng với sqlplus là , vì đây là giới hạn trên cho LINESIZE.

+0

Điều này rất hữu ích khi bạn đang [viết kịch bản DDL bằng cách sử dụng 'DBMS_METADATA.GET_DDL()'] (http://dba.stackexchange.com/a/19506/2660). –

2

Bạn có đang sử dụng Windows không? Tôi đã gặp vấn đề tương tự và cả hai câu trả lời kia đều không giúp tôi (trực tiếp, tôi phải làm thêm một điều nữa). Theo lời khuyên của this article on setting up SQL*Plus for Windows các ghi chú tác giả:

[Note3] Set long big_number để bạn có thể xem định nghĩa của một cò phức tạp hoặc xem, hoặc văn bản trong bất kỳ cột dài hoặc clob.

Tôi đặt mỏ là SET LONG 32000 (dòng dài nhất của tôi dài hơn 2000 ký tự) và giải quyết được vấn đề cho tôi.

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