#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
댓글 없음:
댓글 쓰기