2014년 11월 5일 수요일

#7.SQL*Plus명령어-SET명령(실행환경설정관련)[ORACLE/SQL/HINT/오라클/교육/강의/강좌/SQL교육/오라클 PLSQL/강의/강좌/오라클교육/ORACLE초보교육/오라클실무강좌]

#7.SQL*Plus명령어-SET명령(실행환경설정관련) 

SQL*Plus Set명령은 SQL 명령문의 결과를 사용자가 효과적으로 확인할 수 있는 여러 가지 시스템 환경을 제어하기 위한 명령어이며 명령문의 기능 유지 기간은 세션종료(logout등)나 환경설정을 변경할 때 까지 유지된다. 현재 SQL*Plus의 세션환경을 제어하며 모든 Set 변수 값을 보기 위해서는 Show All명령을 이용하면 된다. 여기서 모든 SQL*Plus 환경 변수를 살펴 보지 않을 것이며 필요한 몇 가지를 예제를 통해 이해하자. 

SQL> show all 
appinfo은 OFF이고 이것을 "SQL*Plus"로 설정합니다 
arraysize 15 
autocommit OFF 
autoprint OFF 
autorecovery OFF 
autotrace OFF 
blockterminator "." (hex 2e) 
btitle OFF 이고 이것은 SELECT 문장 다음에 있는 첫 번째 소수의 문자입니다 
cmdsep OFF 
colsep " " 
compatibility version NATIVE 
concat "." (hex 2e) 
copycommit 0 
COPYTYPECHECK는 ON 입니다 
define "&" (hex 26) 
describe DEPTH 1 LINENUM OFF INDENT ON 
…… 
…… 
…… 
-- 하나의 특정 환경변수 값을 보기 위해서는 아래처럼 
SQL> show autocommit 
autocommit OFF 

SET AUTO[COMMIT] ON/OFF : 자동으로 DML의 실행 결과를 데이터베이스에 반영 할 지의 여부를 결정, 기본적으로 OFF로 되어 있어 Insert/Update/Delete등의 DML(Data Manupulation Language)을 사용시 Commit이라고 기술 해야 한다. 만약 AutoCommit이 ON으로 되어 있다면 트랜잭션을 취소 하는 RollBack은 불가능 하다. 

SQL> create table addrbook ( 
  2  name varchar2(10) not null, 
  3  addr varchar2(50), 
  4  tel varchar2(20)); 
테이블이 생성되었습니다. 

SQL>  show autocommit 
autocommit OFF 

SQL>  insert into addrbook values ('홍길동','서울 강남구 역삼동 11', '02-222-3333’); 
1 개의 행이 만들어졌습니다. 

위 실습까지 수행했다는 가정 하에 다른 사용자가 SQL*Plus를 scott계정으로 똑 같이 접속을 해서 “홍길동”이라는 데이터가 입력 되었는지 확인을 해 보도록 하자. 

SQL> select * from addrbook; 

선택된 레코드가 없습니다. 

--데이터가 한 건도 없는 것은 당연하다. 실습3-5에서 수행한 DML인 Insert문장의 결과가 반영되지 않았기 때문이다. 다른 사용자에서도 “홍길동”이라는 데이터가 보이게 하기 위해서는 Commit을 해 주면 된다. 실습의 마지막 부분에 Commit이라는 명령을 기술하고 다시 별도의 SQL*Plus를 띄운 후 scott 계정으로 접속을 하여 결과를 확인 해 보라. 다음과 같이 나타날 것 이다. 

SQL> select * from addrbook; 

NAME      ADDR                      TEL 
------------------------------------------------------- 
홍길동    서울 강남구 역삼동 11    02-222-3333 

SET PAU[SE] ON/OFF : Query의 결과가 한 화면을 넘어가는 경우 한 화면씩 보이게 할 건지의 여부를 결정한다. ON인 경우 Enter Key를 입력하면 결과를 한 화면씩 보인다. 

SQL> show pause 
PAUSE는 OFF 

SQL> select object_name, object_type from user_objects; 
-- 결과가 여러 화면을 넘어가므로 마지막 화면만 보일 것이다. 

SQL>set pause on 
SQL> select object_name, object_type from user_objects; 
-- Enter Key를 입력하여야 한 단계씩 다음으로 진행 된다. 

SET HEA[DING] ON/OFF : 칼럼 명을 나타낼 지의 여부를 결정한다. 기본값은 ON이며 칼럼 명을 나타낸다. 

SQL> show heading 
heading ON 

SQL> set heading off 
SQL> select ename, sal from emp 
2  where ename = 'SMITH'; 

SMITH            

SQL> set heading on 
SQL> select ename, sal from emp 
  2  where ename = 'SMITH'; 

ENAME            SAL 
---------- ---------- 
SMITH            3000 

SET ARRAY[SIZE] ON/OFF  : 데이터베이스로부터 한번에 처리 되어 지는 행의 수를 지정 

SET ECHO ON/OFF : SQL 파일 등을 실행 시 파일의 SQL 문장을 보일 건지의 여부를 지정 , 기본값은 OFF로서 파일의 SQL 문은 화면에 보이지 않는다. 

SQL> show echo 
echo OFF 

SQL> @test 
사원명          급여 
----------        ---------- 
SMITH          800 
SQL> set echo on 
SQL> @test 
SQL> select ename as "사원명" , sal as "급여" 
  2  from emp 
  3  where ename = 'SMITH' 
  4  / 
사원명            급여 
----------          ---------- 
SMITH            800 

SET EDITFILE 파일이름 : edit 명령등으로 현재 버퍼의 내용을  default Editor로 부를때의 기본 이름을 지정. 지정하지 않으면 afiedt.buf로 자동 지정된다. 

SQL> set editfile firstSQL.sql 
SQL> edit 
file firstSQL (이)가 기록되었습니다 
  1  select ename as "사원명" , sal as "급여" 
  2  from emp 
  3* where ename = 'SMITH' 

SET LONG n : 한 칼럼의 데이터 크기가 2G Bytes에 이르는 가변길이 데이터형인 LONG, 4G Bytes 까지의 character를 저장 할 수 있는 CLOB, NCLOB등의 데이터가 화면에 표시되는 최대 Character수를 지정, 기본값은 80 

SQL> create table LongTest ( 
  2  title varchar2(50) not null, 
  3  content long); 
테이블이 생성되었습니다. 

SQL> insert into LongTest values ('첫번째 게시물...','반갑습니다... 여러분들 뵙게 되어 영광 입니다.'); 
1 개의 행이 만들어졌습니다. 

SQL> commit; 
커밋이 완료되었습니다. 
SQL> select content from LongTest; 
CONTENT 
------------------------------------------------------------------------------- 
반갑습니다... 여러분들 뵙게 되어 영광 입니다. 

SQL> set long 10 
SQL> select content from LongTest; 

CONTENT 
---------- 
반갑습니다 

SET TIME ON/OFF : SQL*Plus 프롬프트상에 시각 표시 여부를 지정, 기본적으로 OFF이며 시각은 표시 되지 않는다. 

SET TIMING ON/OFF : SQL문의 실행 때부터 실행 결과가 응답될 때까지의 시간을 파악하여 출력할 지의 여부를 지정, 기본적으로 OFF이며 응답시각은 표시 되지 않는다. 

SQL> show time 
time OFF 
SQL> set time on 
23:09:36 SQL> show timing 
timing OFF 
23:09:43 SQL> set timing on 
23:10:17 SQL> select ename, sal from emp 
23:10:25  2  where ename like 'S%'; 
ENAME          SAL 
----------          ---------- 
SMITH            800 
SCOTT            3000 

경  과: 00:00:00.00 

SET FEESBACK n : SQL*Plus에서 SELECT 명령문을 실행시 나타내는 출력 행의 수를 지정하는 변수, 지정한 n개 이상 SELECT되는 경우 “~행이 선택되었습니다” 문구가 출력됨. 기본값은 6 

SQL> set feedback 6 
SQL> show feedback 
FEEDBACK ON for 6 or more rows 
SQL> select ename, sal from emp where rownum < 6; 
ENAME            SAL 
---------- ---------- 
SMITH            800 
ALLEN            1600 
WARD            1250 
JONES            2975 
MARTIN          1250 

SQL> select ename, sal from emp 
  2  where rownum < 7; 
ENAME            SAL 
---------- ---------- 
SMITH            800 
ALLEN            1600 
WARD            1250 
JONES            2975 
MARTIN          1250 
BLAKE            2850 

6 rows selected. 

SET LINESIZE n : SQL*Plus에서 출력행(가로폭)의 크기를 지정(예 set linesize 130), 기본값은 80 

SQL> show linesize 
linesize 80 
SQL> select * from emp; 

    EMPNO ENAME      JOB              MGR HIREDATE            SAL      COMM 
---------- ---------- --------- ---------- ------------ ---------- ---------- 
    DEPTNO 
---------- 
      7369 SMITH      CLERK          7902 17-DEC-80          800 
        20 

      7499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300 
        30 
…………. 
…………. 
SQL> set linesize 100 
SQL> select * from emp; 

    EMPNO ENAME      JOB              MGR HIREDATE            SAL      COMM    DEPTNO 
---------- ---------- --------- ---------- ------------ ---------- ---------- ---------- 
  7369 SMITH      CLERK          7902 17-DEC-80          800                    20 
  7499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300        30 


SET PAGESIZE n : SQL*Plus에서 출력을 위한 페이지의 크기를 설정한다, 칼럼 제목을 포함하여 출력 행의 수가 페이지 설정 값을 넘어가면 칼럼 제목이 다시 출력됨. 

SQL> set pagesize 5 
SQL>  select * from emp; 

    EMPNO ENAME      JOB          MGR HIREDATE    SAL  COMM    DEPTNO 
---------- ---------- ----------------- ----------------------- ---------- 
      7369 SMITH      CLERK        7902 17-DEC-80    800                20 
      7499 ALLEN      SALESMAN    7698 20-FEB-81  1600    300        30 

    EMPNO ENAME      JOB          MGR HIREDATE    SAL  COMM    DEPTNO 
---------- ---------- ----------------- ----------------------- ---------- 
      7521 WARD      SALESMAN    7698 22-FEB-81  1250    500        30 
      7566 JONES      MANAGER      7839 02-APR-81  2975                20 
…… 
SET TERMOUT on/off : 파일에 있는 SQL문장을 실행하는 경우 실행 결과를 화면에 출력할지 안 할지를 결정, on이면 출력한다는 의미 

SQL>edit termout.sql 

select * from tab 
where tname = ‘MYDEPT1' 


SQL> set termout off 
SQL> @termout 
SQL> set term on 
SQL> @termout 

TNAME                          TABTYPE  CLUSTERID 
------------------------------ ------- ---------- 
MYDEPT1                      TABLE

댓글 없음:

댓글 쓰기