Bagaimana cara membuat output sqlplus muncul dalam satu baris?

47

Saya punya meja dengan 100 kolom. Saat memilih data dalam SQL Pluskeluaran, membuatnya sulit dibaca.

Yang saya lebih suka adalah bilah gulir horizontal muncul atau mengirim output less

Saya menjalankan pernyataan berikut dalam SQLPlus -

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

Lalu bashaku berlari -

lebih sedikit output.txt

Outputnya masih tampak terbungkus dan tidak dapat dibaca.

Kshitiz Sharma
sumber
1
Saya juga ingin kolom diperluas secara otomatis alih-alih saya harus mengatur ukuran kolom untuk masing-masing secara individual.
Kshitiz Sharma

Jawaban:

58

Tidak cukup untuk memaksa sqlplus untuk tidak membungkus garis. Anda juga perlu memberi tahu pemirsa bahwa Anda menggunakan untuk melihat file spool untuk tidak membungkus baris. Jika pemirsa Anda lessmaka -Sopsi yang harus Anda gunakan sesuai dengan https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . Pada Unix / Linux Anda dapat menggunakan head -1 output.txtuntuk mendapatkan baris pertama dari suatu file dan jadi periksa apakah ini seperti yang diharapkan atau Anda dapat menggunakan od -c output.txt|head untuk melihat di mana garis putus sebenarnya ditempatkan di file output Anda.

Jika Anda menampilkan kolom PANJANG dan nilainya berisi jeda baris maka beberapa baris akan dicetak untuk nilai kolom ini dan Anda tidak dapat mengesampingkan ini dengan pengaturan sqlplus.


Perintah sqlplus berikut mungkin berguna:

  • SET LINESIZE linesizepanjang garis. Dalam kebanyakan kasus, nilai maksimum linesizeadalah 32767. Anda dapat mengetahui nilai maksimum Anda jika Anda menetapkan LINESIZE ke nilai yang tidak valid dan memeriksa pesan kesalahan sehingga SET LINESIZE 0dapat memberikan SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON jika tidak, setiap baris di spoolfile diisi dengan kosong sampai garis tersebut tercapai.
  • SET TRIMOUT ON jika tidak, setiap baris dalam output diisi dengan kosong sampai garis tersebut tercapai.
  • SET WRAP OFFMemotong garis jika lebih panjang dari LINESIZE. Ini seharusnya tidak terjadi jika garis cukup besar.
  • SET TERMOUT OFFmenekan pencetakan hasil ke output. Baris masih ditulis ke file spool. Ini dapat mempercepat waktu pengekspresian sebuah pernyataan.
  • SET PAGESIZE 0 untuk mengatur pageize yang tak terbatas dan menghindari heading, judul dan sebagainya.
  • Ada beberapa SETparameter lain mengenai output (NUMWIDTH, NUMFORMAT, LONG, COLSEP) dan kinerja (ARRAYSIZE, LONGCHUNKSIZE).

Anda harus menggunakan COLUMNperintah untuk memformat kolom individual.

Misalnya column name format a30akan memformat kolom namedalam output hingga panjang maksimum 30 karakter.

Jika Anda ingin ukuran tampilan tidak diperbaiki tetapi harus sama dengan ukuran nilai aktual kolom dalam satu baris maka satu-satunya cara saya tahu adalah Anda mengubah klausa pilih pernyataan Anda untuk mendapatkan hasil yang diinginkan dan menggunakan operator penggabung string ||, mis

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

Deskripsi lengkap dari semua variabel dapat ditemukan di Panduan Pengguna dan Referensi SQL * Plus .

Jika Anda ingin menggunakan kembali beberapa pengaturan (atau definisi COLUMN), Anda dapat menyimpannya dalam file dan menjalankan file ini saat Anda membutuhkannya lagi. Anda bahkan dapat menjalankan file ini secara otomatis jika Anda memulai sqlplus.

(1) "Cara Menemukan LINESIZE Nilai Maksimum (Ini Tergantung Sistem) (Doc ID 1547262.1)"

keajaiban173
sumber
LONGCHUNKSIZEbukan hanya tentang kinerja, tampaknya diperlukan untuk menghindari yang tidak diinginkan line-pembungkus selain untuk LINESIZE, hanya bereksperimen dengan keluaran tidak dapat digunakan dariDBMS_METADATA.get_ddl()
Daniel Verite
2
Jawaban yang bagus ...
ypercubeᵀᴹ
2
Apa yang dikatakan @ YperSillyCubeᵀᴹ :)
Tom V
Anda harus menggunakan SET PAGESIZE 1000bukan 0sebaliknya kolom header tidak akan mencetak ketika mengeluarkan `SELECT" perintah. Referensi .
Pierre C
@PierreC itu sebabnya saya menulis "SET PAGESIZE 0 untuk mengatur pageize tak terbatas dan menghindari judul, judul, dan sebagainya."
miracle173
5

Anda perlu mengatur di bawah ini:

SET WRAP OFF
Balazs Papp
sumber
3
set linesize 30000 SET WRAP OFFmelakukan trik untuk saya
ren
2

Anda dapat mengatur seperti ini

SET WRAP OFF

SET PAGESIZE 0
DevYudh
sumber