programing

oracle sqlplus에서 테이블 데이터를 보다 명확하게 표시하는 방법

javajsp 2023. 2. 23. 22:01

oracle sqlplus에서 테이블 데이터를 보다 명확하게 표시하는 방법

다른 열 아래에 있는 모든 열이 아니라 선택 항목에서 얻은 데이터를 예쁘게 표시할 수 있도록 하고 싶습니다.

sqlplus에서 테이블 데이터를 표시하는 방법은 다음과 같습니다.

여기에 이미지 설명 입력

하지만 다음과 같이 보여드리고 싶습니다.

Name   |    Address    |    Phone    |
-------+---------------+-------------+
name1  |    address1   |    phone1   |
name2  |    address2   |    phone2   |
name3  |    address3   |    phone3   |

각 열이 다른 열 아래에 없음

저는 보통 이렇게 시작합니다.

set lines 256
set trimout on
set tab off

봐주세요help set도움말 정보가 설치되어 있는 경우.그리고 나서.select name,address보다는select *이 두 개의 열만 원하는 경우.

이렇게 보고 싶은 경우:

WORKPLACEID NAME       ADDRESS        TELEPHONE
----------- ---------- -------------- ---------
          1 HSBC       Nugegoda Road      43434
          2 HNB Bank   Colombo Road      223423

그런 다음 SQL Plus에서 다음과 같이 열 너비를 설정할 수 있습니다(예:).

column name format a10
column address format a20
column telephone format 999999999

필요에 따라서, 다음과 같이 행 사이즈와 페이지 사이즈를 지정할 수도 있습니다.

set linesize 100 pagesize 50

쿼리를 실행하기 전에 이러한 명령을 SQL Plus에 입력하여 이 작업을 수행합니다.또는 이러한 명령과 쿼리를 스크립트 파일(예: myscript)에 넣을 수 있습니다.sql과 실행해 주세요.예를 들어 다음과 같습니다.

column name format a10
column address format a20
column telephone format 999999999

select name, address, telephone
from mytable;

창 너비에 따라 줄 크기를 설정하고 다음 명령을 사용하여 줄 바꿈을 설정할 수 있습니다.

set linesize 160;
set wrap off;

160을 사용했는데 내 취향에 따라 다음 중 하나로 설정할 수 있습니다.100 - 200랩을 설정하면 데이터가 표시되지 않고 데이터가 올바르게 표시됩니다.

sqlplus로 만든 덤프가 있고 이전에 누군가가 이 3개의 값을 설정하지 않아 출력이 흐트러진 경우, 빠져나갈 방법이 있습니다.

불과 몇 시간 전 DB 관리자가 sqlplus에서 실행된 보기 흉한 쿼리 출력을 전송했습니다(모르겠어요, 아마 저를 싫어할 수도 있어요...).나는 탈출구를 찾아야 했다: 이것은 적어도 읽기 쉽게 하기 위해 출력을 해석하는 awk 스크립트이다.완벽하진 않지만 제대로 닦을 시간이 없었어요.어쨌든, 그것은 꽤 일을 잘 한다.

awk ' function isDashed(ln){return ln ~ /^---+/};function addLn(){ln2=ln1; ln1=ln0;ln0=$0};function isLoaded(){return l==1||ln2!=""}; function printHeader(){hdr=hnames"\n"hdash;if(hdr!=lastHeader){lastHeader=hdr;print hdr};hnames="";hdash=""};function isHeaderFirstLn(){return isDashed(ln0) && !isDashed(ln1) && !isDashed(ln2) }; function isDataFirstLn(){return isDashed(ln2)&&!isDashed(ln1)&&!isDashed(ln0)}                         BEGIN{_d=1;h=1;hnames="";hdash="";val="";ln2="";ln1="";ln0="";fheadln=""}                                 { addLn();  if(!isLoaded()){next}; l=1;             if(h==1){if(!isDataFirstLn()){if(_d==0){hnames=hnames" "ln1;_d=1;}else{hdash=hdash" "ln1;_d=0}}else{_d=0;h=0;val=ln1;printHeader()}}else{if(!isHeaderFirstLn()){val=val" "ln1}else{print val;val="";_d=1;h=1;hnames=ln1}}   }END{if(val!="")print val}'

다른 누군가가 이 스크립트를 개선하려고 하는 경우, 아래 변수는 다음과 같습니다: hnames -- 헤더에 있는 열 이름, hdash -- 헤더 아래에 있는 hdash -- 내가 현재 헤더를 해석하고 있는지 여부(==1), val -- hnames와 hdash 간에 스왑하기 위한 데이터, _d - - - lin0 - last line read, lin - lin - line read, lin - lin - lin - lin - lin - lin - lin - lin - lin - lin - lin - lin - line read (실제로 읽고 있습니다.with) ln2 - ln1보다 앞의 행 읽기

해피파싱!

아, 잊을 뻔했네...직접 sqlplus 출력을 예쁘게 하기 위해 사용합니다.

[oracle@ora ~]$ cat prettify_sql 
set lines 256
set trimout on
set tab off
set pagesize 100
set colsep " | "

colsep은 옵션이지만 출력을 sqlite처럼 보이게 하기 때문에 스크립트를 사용하여 해석하기 쉬워집니다.

편집: 구문 분석된 출력과 구문 분석되지 않은 출력의 작은 미리 보기

구문 분석된 출력과 구문 분석되지 않은 출력의 간단한 미리 보기

아, 멍청한 선크기...내 profile.sql에서 수행하는 작업은 다음과 같습니다. UNIX에서만 작동합니다.

echo SET LINES $(tput cols) > $HOME/.login_tmp.sql
@$HOME/.login_tmp.sql

Windows 에서의 tput에 상당하는 것을 발견했을 경우는, Windows 에서도 동작할 가능성이 있습니다.

언급URL : https://stackoverflow.com/questions/3006431/how-to-display-table-data-more-clearly-in-oracle-sqlplus