Làm thế nào để làm cho đầu ra sqlplus xuất hiện trong một dòng?


47

Tôi có một bảng với 100 cột. Khi chọn dữ liệu trong SQL Pluskết thúc tốt đẹp, làm cho nó khó đọc.

Điều tôi muốn là một thanh cuộn ngang xuất hiện hoặc bằng cách nào đó gửi đầu ra tới less

Tôi chạy các câu lệnh sau trong SQLPlus -

SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;

Sau đó, bashtôi chạy -

ít output.txt

Đầu ra vẫn xuất hiện bọc và không thể đọc được.


1
Tôi cũng muốn các cột tự động mở rộng thay vì tôi phải đặt kích thước cột cho từng cột.
Kshitiz Sharma

Câu trả lời:


58

Nó không đủ để buộc sqlplus không bọc dòng. Cũng cần phải nói với người xem rằng bạn sử dụng để xem tệp spool không được ngắt dòng. Nếu người xem của bạn là lesssau đó -Stùy chọn mà bạn phải sử dụng theo https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . Trên Unix / Linux, bạn có thể sử dụng head -1 output.txtđể lấy dòng đầu tiên của tệp và vì vậy hãy kiểm tra xem đây có phải là mong đợi hay bạn có thể sử dụng od -c output.txt|head để xem nơi ngắt dòng thực sự được đặt trong tệp đầu ra của bạn.

Nếu bạn hiển thị các cột LONG và các giá trị của chúng chứa các ngắt dòng thì nhiều dòng sẽ được in cho các giá trị cột này và bạn không thể ghi đè lên điều này bằng các cài đặt sqlplus.


Các lệnh sqlplus sau đây có thể hữu ích:

  • SET LINESIZE linesizechiều dài của dòng. Trong hầu hết các trường hợp, giá trị tối đa linesizelà 32767. Bạn có thể tìm ra giá trị tối đa của mình nếu bạn đặt LINESIZE thành giá trị không hợp lệ và kiểm tra thông báo lỗi để SET LINESIZE 0có thể đưa ra SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON mặt khác, mọi dòng trong spoolfile đều được lấp đầy bằng các khoảng trống cho đến khi đạt được kích thước đường thẳng.
  • SET TRIMOUT ON mặt khác, mỗi dòng trong đầu ra được lấp đầy với khoảng trống cho đến khi đạt được kích thước đường.
  • SET WRAP OFFCắt ngắn dòng nếu nó dài hơn thì LINESIZE. Điều này không nên xảy ra nếu lineize đủ lớn.
  • SET TERMOUT OFFngăn chặn việc in kết quả ra đầu ra Các dòng vẫn được ghi vào tệp spool. Điều này có thể đẩy nhanh thời gian thực hiện của một tuyên bố rất nhiều.
  • SET PAGESIZE 0 để đặt kích thước trang vô hạn và tránh các tiêu đề, tiêu đề, v.v.
  • Có một SETsố thông số khác liên quan đến đầu ra (NUMWIDTH, NUMFORMAT, LONG, COLSEP) và hiệu suất (ARRAYSIZE, LONGCHUNKSIZE).

Bạn phải sử dụng COLUMNlệnh để định dạng các cột riêng lẻ.

Ví dụ: column name format a30định dạng cột nametrong đầu ra với độ dài tối đa 30 ký tự.

Nếu bạn không muốn sửa kích thước hiển thị nhưng nó phải bằng kích thước của giá trị thực của một cột trong một hàng thì cách duy nhất tôi biết là bạn thay đổi mệnh đề chọn của câu lệnh để có kết quả mong muốn và sử dụng toán tử nối chuỗi ||, vd

select emp_id||' '||first_name||' '||last_name
from emp;

Có thể tìm thấy mô tả đầy đủ về tất cả các biến trong Hướng dẫn và tham khảo của người dùng SQL * Plus .

Nếu bạn muốn sử dụng lại một số cài đặt (hoặc định nghĩa CỘT), bạn có thể lưu trữ chúng trong một tệp và chạy tệp này khi bạn cần lại chúng. Bạn thậm chí có thể chạy tệp này tự động nếu bạn bắt đầu sqlplus.

(1) "Cách tìm giá trị tối đa LINESIZE (Đó là phụ thuộc hệ thống) (ID tài liệu 1547262.1)"


LONGCHUNKSIZEkhông chỉ là về hiệu suất, có vẻ như là cần thiết để tránh việc đóng gói không mong muốn ngoài việc LINESIZE, chỉ thử nghiệm điều này với đầu ra không thể sử dụng được từDBMS_METADATA.get_ddl()
Daniel Vérité

2
Câu trả lời hay ...
ypercubeᵀᴹ

2
Những gì @ YperSillyCubeᵀᴹ đã nói :)
Tom V

Bạn nên sử dụng SET PAGESIZE 1000thay vì 0các tiêu đề cột khác sẽ không in khi ban hành các lệnh `CHỌN". Tham khảo .
Pierre C

@PierreC đó là lý do tại sao tôi đã viết "SET PAGESIZE 0 để đặt kích thước trang vô hạn và tránh các tiêu đề, tiêu đề, v.v."
phép lạ173

5

Bạn cần thiết lập như sau:

SET WRAP OFF

3
set linesize 30000 SET WRAP OFFđã lừa cho tôi
ren

2

bạn có thể thiết lập như thế này

SET WRAP OFF

SET PAGESIZE 0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.