2013-03-18 37 views
8

Một trong những vấn đề khi thực hiện một tuyên bố dài cho việc hiển thị các cột khác nhau ví dụOracle chiều rộng cột cho tất cả các cột

select g.guestid, g.forename, g.surname, b.bookingid, 
b.arrivedate, b.departdate, br.floorno, br.roomno from... 

các kích thước cột trên terminal linux có vẻ là một vấn đề. Ví dụ các tên đầu tiên varchar (80) cột chiếm phần lớn chiều rộng của màn hình khi thực hiện các tuyên bố trên và một cách để cắt nó xuống sẽ được thông qua:

SET COLUMN FORENAME FORMAT A10 

ví dụ. Tuy nhiên, nhiều cột sẽ cần phải được lặp đi lặp lại thông qua điều này là khá dài. ví dụ:

SET COLUMN FORENAME FORMAT A10 
SET COLUMN SURNAME FORMAT A10 

và vân vân ...

Có cách nào để nói điều chỉnh độ rộng cột theo chiều rộng văn bản để mọi vừa độc đáo. và không như thế này ..

enter image description here

tôi muốn một số giải pháp mà không liên quan đến việc sử dụng các chức năng.

+2

Thử sử dụng các công cụ GUI thay vì SQLPlus. Cửa sổ đầu cuối không phù hợp để hiển thị dữ liệu. –

+0

@EgorSkriptunoff: phụ thuộc vào máy khách dòng lệnh;) SQL * Plus thực sự gây phiền nhiễu về điều này. –

+0

Vâng, các khung dữ liệu của Spark được hiển thị đẹp mắt trên thiết bị đầu cuối. – alexgbelov

Trả lời

-1

Phiên không biết độ dài tối đa của chuỗi được trả về sẽ là bao nhiêu cho đến khi chạy truy vấn. Các cột nên được kích thước một cách thích hợp tất nhiên, nhưng có thể bạn thực sự sẽ nhận được một danh sách các tên có độ dài 80 ký tự - nếu không thì chiều dài loại dữ liệu của bạn quá lớn.

Như Eric nói, các công cụ GUI tốt hơn và Nhà phát triển SQL của Oracle là miễn phí và tốt.

1

Không, không có cách đơn giản nào để làm cho độ rộng cột "tự động điều chỉnh" của SQL * Plus thành chiều rộng văn bản.

Tuy nhiên, tập lệnh có thể làm cho cuộc sống của bạn dễ dàng hơn.

Trước hết, hãy giảm nhập. Đừng làm SET COLUMN FORENAME FORMAT A10, thay vào đó hãy làm một cái gì đó như @c forename 10.

17:33:31 [email protected]> cl col 
columns cleared 
17:33:33 [email protected]> select * from dual; 

D 
- 
X 

Elapsed: 00:00:00.01 
17:33:37 [email protected]> @c dummy 10 
17:33:43 [email protected]> select * from dual; 

DUMMY 
---------- 
X 

Elapsed: 00:00:00.01 
17:33:45 [email protected]> get s:\c.sql 
    1* col &1. for a&2. 
17:33:50 [email protected]> 

Hoặc một cách nhanh chóng ẩn các cột rộng như thế này:

17:48:44 [email protected]> select owner, table_name from all_tables where rownum = 1; 

OWNER       TABLE_NAME 
------------------------------ ------------------------------ 
SYS       CON$ 

Elapsed: 00:00:00.24 
17:48:49 [email protected]> @np owner 
17:48:53 [email protected]> select owner, table_name from all_tables where rownum = 1; 

TABLE_NAME 
------------------------------ 
CON$ 

Elapsed: 00:00:00.26 
17:48:56 [email protected]> get s:\np 
    1 col &1 noprint 
    2* @undef 

Đây chỉ là một hai trong số nhiều kịch bản tôi sử dụng trên một cơ sở hàng ngày. Cách tiếp cận này mất thời gian và một số chú ý cá nhân để tùy chỉnh để làm quen với nó và làm cho nó hiệu quả, nhưng làm giảm số lượng các phím bạn nhấn đáng kể.

Thứ hai, có glogin.sql. Nó là một kịch bản thực hiện mỗi khi bạn kết nối một nơi nào đó. Tôi giả sử bạn biết một danh sách các cột "dài" làm cho các dòng của bạn được bao bọc.

Chỉ cần liệt kê chúng ở đó, và

SET COLUMN FORENAME FORMAT A10 
SET COLUMN SURNAME FORMAT A10 

thông số cột của bạn sẽ được thiết lập mỗi khi bạn (lại) kết nối.

0

Tom Kyte đã viết print_table procedure, hiển thị tập hợp kết quả theo kiểu thẳng đứng.

Ví dụ:

SQL> exec print_table('select g.guestid, g.forename, ... from ...') 
GUESTID      : 210 
FORENAME      : DINGLE 
... 
etc... 
.... 
----------------- 

PL/SQL procedure successfully completed. 

Thủ tục này có ích đặc biệt là khi tập kết quả là nhỏ, tốt nhất là không quá có lẽ 10 dòng.

-1

Định dạng SQL ansiconsole có thể là những gì bạn đang tìm kiếm.

set sqlformat ansiconsole; 
select g.guestid, g.forename, g.surname, b.bookingid, 
    b.arrivedate, b.departdate, br.floorno, br.roomno from... 

Hoặc:

cột tự động kích thước
select /*ansiconsole*/ g.guestid, g.forename, g.surname, b.bookingid, 
    b.arrivedate, b.departdate, br.floorno, br.roomno from... 

Định dạng này để dựa vào kích thước của kết quả truy vấn.

+0

không phải là sqlplus nhưng SQLcl – miracle173

0

Như đã được nêu bởi những người dùng khác không có giải pháp đơn giản cho sqlplus. Có thể giúp sử dụng tệp glogin.sql hoặc login.sql (@ René Nyffenegger cung cấp article about those files). Bạn có thể đặt các định nghĩa cột trong các tệp này. Nếu bạn luôn truy vấn cùng một truy vấn hoặc nếu bạn đặt tên cho cột phù hợp, điều này có thể hữu ích.

Hoặc bạn đặt những điều khoản về cột trong một kịch bản mà bạn gọi bằng

@scriptname.sql 

nếu bạn muốn sử dụng định dạng cột. Bạn đặt kịch bản trong một thư mục là một phần của SQLPATH variable để nó có thể được gọi từ bất kỳ thư mục nào.

Hoặc bạn sử dụng công cụ khác. Một người dùng alredy chỉ vào số SQLcl.

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