sqlplus 출력을 한 줄에 표시하는 방법은 무엇입니까?


46

열이 100 개인 테이블이 있습니다. SQL Plus출력 줄 바꿈 에서 데이터를 선택할 때 읽기가 어렵습니다.

내가 원하는 것은 가로 스크롤 막대가 나타나거나 어떻게 든 출력을 less

SQLPlus에서 다음 명령문을 실행합니다.

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

그런 다음 bash달리기-

더 적은 output.txt

출력은 여전히 ​​랩핑되어 읽을 수없는 것으로 나타납니다.


1
또한 개별적으로 열 크기를 설정하지 않고 열을 자동 확장하고 싶습니다.
Kshitiz Sharma

답변:


57

sqlplus를 강제로 줄 바꿈하지 않는 것만으로는 충분하지 않습니다. 또한 줄 바꿈하지 않도록 스풀 파일을 보는 데 사용한다는 것을 뷰어에게 알려 주어야합니다. 뷰어 인 경우 less다음 -S옵션 당신은에 따라 사용해야합니다 https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . 유닉스 / 리눅스 head -1 output.txt에서는 파일의 첫 번째 줄을 가져 오는 데 사용할 수 있으므로 이것이 예상 한 것인지 확인하거나 od -c output.txt|head 줄 바꿈이 실제로 출력 파일에서 어디에 위치하는지 확인할 수 있습니다 .

LONG 열을 표시하고 해당 값에 줄 바꿈이 포함 된 경우 이러한 열 값에 대해 여러 줄이 인쇄되며 sqlplus 설정으로이를 무시할 수 없습니다.


다음 sqlplus 명령이 유용 할 수 있습니다.

  • SET LINESIZE linesize라인의 길이 대부분의 경우에 대한 최대 값은 linesize32767 당신은 잘못된 값으로 LINESIZE을 설정하면 최대 값을 찾아 오류 메시지가 너무 확인할 수 있습니다 SET LINESIZE 0제공 할 수 있습니다 SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON 그렇지 않으면 스풀 파일의 모든 행은 행 크기에 도달 할 때까지 공백으로 채워집니다.
  • SET TRIMOUT ON 그렇지 않으면 라인 크기에 도달 할 때까지 출력의 모든 라인이 공백으로 채워집니다.
  • SET WRAP OFF줄이 LINESIZE보다 길면 줄을 자릅니다. 선 크기가 충분히 크면 이런 일이 발생하지 않아야합니다.
  • SET TERMOUT OFF결과를 출력으로 인쇄하지 않습니다. 행은 여전히 ​​스풀 파일에 기록됩니다. 이것은 성명서의 집행 시간을 크게 가속화시킬 수 있습니다.
  • SET PAGESIZE 0 무한 페이지 크기를 설정하고 제목, 제목 등을 피하십시오.
  • SET출력 (NUMWIDTH, NUMFORMAT, LONG, COLSEP) 및 성능 (ARRAYSIZE, LONGCHUNKSIZE)과 관련된 다른 매개 변수 가 있습니다 .

COLUMN개별 열의 형식을 지정 하려면 명령 을 사용해야합니다 .

예를 들어 출력 column name format a30의 열 name을 최대 길이 인 30 자로 형식화합니다 .

표시 크기를 수정하지 않고 행의 실제 열 값 크기와 같아야하는 유일한 방법은 원하는 결과를 얻기 위해 명령문의 select 절을 변경하는 것입니다. 문자열 연결 연산자 ||, 예를 들어,

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

모든 변수에 대한 자세한 설명은 SQL * Plus 사용자 안내서 및 참조 서 에서 찾을 수 있습니다 .

일부 설정 (또는 COLUMN 정의)을 재사용하려면 해당 파일을 파일에 저장하고 필요할 때이 파일을 실행할 수 있습니다. sqlplus를 시작하면이 파일을 자동으로 실행할 수도 있습니다.

(1) "LINESIZE 최대 값을 찾는 방법 (시스템에 따라 다름) (문서 ID 1547262.1)"


LONGCHUNKSIZE단지 성능에 대해 아니다, 바람직하지 않은 줄 바꿈을 방지하기 위해 필요한 것으로 나타납니다 추가LINESIZE단지에서 사용할 수없는 출력이 실험,DBMS_METADATA.get_ddl()
다니엘 베리 테

2
좋은 대답 ...
ypercubeᵀᴹ

2
@ YperSillyCubeᵀᴹ의 말 :)
Tom V

당신은 사용해야하는 SET PAGESIZE 1000대신 0"명령을 선택`발행 할 때 인쇄되지 않습니다 그렇지 않으면 열 헤더. 참조 .
피에르 C

@PierreC 그렇기 때문에 "무제한 페이지 크기를 설정하고 제목, 제목 등을 피하기 위해 SET PAGESIZE 0"을 작성했습니다.
기적 173

5

아래를 설정해야합니다.

SET WRAP OFF

3
set linesize 30000 SET WRAP OFF나를 위해 트릭을했다
ren

2

이렇게 설정할 수 있습니다

SET WRAP OFF

SET PAGESIZE 0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.