posted by 구름너머 2007. 1. 12. 19:20
Re: oracle 9i에서 sqlplus질문좀 할께요...
게시일: Jan 7, 2007 7:02 AM Zenos님의 질문에 답변 Zenos 님의 질문에 답변

sqlplus 에 접속하면 $ORACLE_HOME/sqlplus/admin/glogin.sql 에서
설정된 환경변수들을 가져오지요...
컬럼값은 default로 어떻고 pages는 어떻게 하고
만약 default로 설정된 값을 수정하고 싶다면
glogin.sql을 수정하시면 됩니다.


1. 한 라인에 출력되는 수 조정하기
SQL> set line 150 ==> 150라인까지 넓게 씁니다. default는 80라인일 겁니다.

2. 페이지 수 조정하기
SQL> set pages 1000 => 출력되는 row수가 glogin.sql에 설정된
14보다 많이 나오면(컬럼이름출력 포함)
다시 컬럼이 어떤 거다 하면서 나오는데 pages를 1000으로 주면
1000개의 row가 출력되고 나서야 아래 컬럼이 모다 라고 나옵니다.

예를들면


SQL> select d.deptno, e.empno, e.ename, d.dname, e.sal from dept d, emp e
2 where d.deptno=e.deptno;



DEPTNO EMPNO ENAME DNAME SAL
---------- ---------- ---------- -------------- ----------
10 7782 CLARK ACCOUNTING 2450
10 7839 KING ACCOUNTING 5000
10 7934 MILLER ACCOUNTING 1300
20 7369 SMITH RESEARCH 800
20 7876 ADAMS RESEARCH 1100
20 7902 FORD RESEARCH 3000
20 7788 SCOTT RESEARCH 3000
20 7566 JONES RESEARCH 2975
30 7499 ALLEN SALES 1600
30 7698 BLAKE SALES 2850
30 7654 MARTIN SALES 1250

DEPTNO EMPNO ENAME DNAME SAL
---------- ---------- ---------- -------------- ----------
30 7900 JAMES SALES 950
30 7844 TURNER SALES 1500
30 7521 WARD SALES 1250

14 rows selected.


SQL> set pages 1000
SQL> /

DEPTNO EMPNO ENAME DNAME SAL
---------- ---------- ---------- -------------- ----------
10 7782 CLARK ACCOUNTING 2450
10 7839 KING ACCOUNTING 5000
10 7934 MILLER ACCOUNTING 1300
20 7369 SMITH RESEARCH 800
20 7876 ADAMS RESEARCH 1100
20 7902 FORD RESEARCH 3000
20 7788 SCOTT RESEARCH 3000
20 7566 JONES RESEARCH 2975
30 7499 ALLEN SALES 1600
30 7698 BLAKE SALES 2850
30 7654 MARTIN SALES 1250
30 7900 JAMES SALES 950
30 7844 TURNER SALES 1500
30 7521 WARD SALES 1250

14 rows selected.

3. 컬럼크기 조정하기
1) 숫자값일 경우
col 컬럼이름 format 999,999,999,999 => 천단위로 콤마를 찍어서 표현
col 컬럼이름 format 999999999999 ==> 출력하는 단위가 클 경우에 ###으로
표시되곤 하는데 이것을 방지해줍니다.


2) 문자값일 경우
col 컬럼이름 format a40 => 40개 글자의 공간에 찍힙니다.


테스트를 해보면..
v$datafile의 name은 너무 길어서 한 라인이 넘어가버리죠.

SQL> select name, status from v$datafile;

NAME
--------------------------------------------------------------------------------
STATUS
-------
/data/oradata/PROD/system01.dbf
SYSTEM

/data/oradata/PROD/undotbs01.dbf
ONLINE

/data/oradata/PROD/user01.dbf
ONLINE


NAME
--------------------------------------------------------------------------------
STATUS
-------
/data/oradata/PROD/test.dbf
ONLINE


SQL> col name format a40
아래처럼 40글자 공간에만 나옵니다.
SQL> /

NAME STATUS
---------------------------------------- -------
/data/oradata/PROD/system01.dbf SYSTEM
/data/oradata/PROD/undotbs01.dbf ONLINE
/data/oradata/PROD/user01.dbf ONLINE
/data/oradata/PROD/test.dbf ONLINE


자세한 것은
http://intranet.warevalley.com/manual/Oracle9iR2OnlineManual/server.920/a90843/toc.htm#765270

을 참고하세요.


추가적으로.. SQL> set autot on 을 했을 경우에 쿼리결과값과 쿼리수행에 대한
통계정보 그리고 execution plan이 나옵니다.
그런데 execution plan이 라인이 내려가고 보기가 어렵죠.
아래처럼 하면 넓게 보여서 쉽습니다.

SQL> select d.deptno, e.empno, e.ename, d.dname, e.sal from dept d, emp e
2 where d.deptno=e.deptno;


Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=9 Card=409 Bytes=241
31)

1 0 MERGE JOIN (Cost=9 Card=409 Bytes=24131)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=2 Card=4 B
ytes=52)

3 2 INDEX (FULL SCAN) OF 'UK_DEPT' (NON-UNIQUE) (Cost=1 Ca
rd=4)

4 1 SORT (JOIN) (Cost=7 Card=409 Bytes=18814)
5 4 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=409 Bytes=18
814)
....


이제 execution plan이 나오는 것을 조정해봅니다.

#plan table 조정하기

COLUMN id_plus_exp FORMAT 990 HEADING i
COLUMN parent_id_plus_exp FORMAT 990 HEADING p
COLUMN object_node_plus_exp FORMAT a8
COLUMN other_tag_plus_exp FORMAT a29
COLUMN other_plus_exp FORMAT a44
COLUMN plan_plus_exp FORMAT a100
SET linesize 132

아래처럼 execution plan이 보기쉽게 나오죠.
DB2 UDB는 SUBSTR를 사용해야만 되는데 sqlplus 는 정말 강력해서
좋은 기능들이 많아요. 왜 DBA들이 sqlplus만 사용하는지 그 강력한
기능을 메뉴얼을 보시면 알게 될 겁니다.

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=9 Card=409 Bytes=24131)
1 0 MERGE JOIN (Cost=9 Card=409 Bytes=24131)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=2 Card=4 Bytes=52)
3 2 INDEX (FULL SCAN) OF 'UK_DEPT' (NON-UNIQUE) (Cost=1 Card=4)
4 1 SORT (JOIN) (Cost=7 Card=409 Bytes=18814)
5 4 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=409 Bytes=18814)

'ORACLE' 카테고리의 다른 글

CORE DUMP 해결방법  (0) 2007.03.06
Pro*C란  (11) 2007.03.06
오라클 Role 관리  (0) 2006.12.18
테이블의 필드명 변경하기...  (0) 2006.12.15
테이블 스페이스의 정보 확인  (0) 2006.09.08