본문 바로가기

.주제별/SQL,DB

SQL)강의- 제 3 장 SQL *Plus 명령어

출처 : http://naver.kaist.ac.kr/oracle_sql/s03.htm
 

♣ 테이블 구조 조회(DESC 명령)

    ◈SQL*Plus의 DESCRIBE명령은 테이블의 구조를 표시한다.
          SQL>DESCRIBE 테이블명
    ◈NOT NULL인 column은 반드시 값을 가져야 한다.
    ◈Column, Datatype 및 길이(length)
    ◈명령의 결과는 column명, datatype 및 column이 NULL값을 허용하는지를 알 수 있다.

    실습 : S_DEPT 테이블의 구조에 관한 정보를 출력 하시오.

    SQL> DESCRIBE s_dept;

     

1. SQL *Plus편집 명령어

    ◈SQL문장을 수행하고 나면 SQL buffer에 마지막으로 수행된 SQL문장이 저장된다.
    ◈SQL buffer에 저장되어 있는 SQL문장은 SQL*PLUS의 EDIT command를 이용하여 EDIT를 한다.
    ◈SQL buffer에는 맨마지막으로 수행된 단 1개의 SQL문장만이 남아있다.

    Command

    설    명

    A[PPEND] text

    현재 Line의 마지막에 text를 추가한다

    C[HANGE]/old_text/new_text

    old_text를 new_text로 변경한다.

    C[HANGE]/text/

    현재 행으로부터 Text를 삭제한다.

    CL[EAR] BUFF[ER]

    SQL버퍼로부터 모든 라인을 삭제한다.

    DEL

    SQL buffer에 남아있는 SQL문장을 삭제한다.

    I[NPUT]

    SQL buffer의 마지막에 새로운 Line을 추가

    L[IST]

    SQL buffer에 남아있는 모든 SQL문장을 보여준다.

    L[IST] m n

    m에서 n라인까지의 내용을 보여 준다.

    R[UN]

    SQL buffer의 내용을 display하고 수행한다.

    n

    n라인으로 현재 위치를 변경시켜 준다.

    n text

    n 으로 지정된 Line을 text로 변경한다.

    0 text

    1 라인 전에 하나의 라인을 삽입한다.

    ◈명령어 작성중간에 [RETURN]키를 누르면 SQL*Plus는 라인번호와 함께 프람프트를 내어 준다.
    ◈터미네이터 문자(세미콜론 또는 슬레쉬)중 하나를 입력하거나 (RETURN)키를 두 번 누름으로
       SQL 명령어 입력을 끝낼 수 있다. 이때 SQL 프람프트를 볼 수 있다.

     

 2. SQL *Plus 파일 명령어

    ◈SQL*Plus는 환경제어, Query결과 Format설정 및 파일관리를 위해 아래 명령어들을 제공한다.

    Command

    설 명

    SAVE filename
    [REPLACE]

    SQL buffer의 내용을 filename으로 FILE에 저장한다.
    (REPLACE 명령어를 사용하면 저장하고자 하는 filename이 있으면 file의 내용을 SQL buffer의 내용으로 변경하고, 없으면 새로운 file을 만든다)

    GET filename

    filename.sql로 저장된 내용을 출력 하시오

    START(/) filename

    filename.sql로 저장된 file을 수행한다

    @filename

    filename.sql로 저장된 file을 수행한다(START와 동일)

    RUN

    SQL buffer의 내용을 display하고 수행한다.

    ED(IT) filename

    저장된 파일의 내용을 편집하기 위해 편집기를 실행한다.

    EXIT

    SQL *Plus를 중단한다.

    SPOOL filenamel[off]

    향후 수행될 sql 문의 결과를 저장한다

    HOST

    SQL *Plus를 종료하지 않고도 HOST 운영체제의 명령어를 실행한다.

    ◈Note : SQL *Plus 변수 _EDITOR의 값을 DEFINE명령을 사용하여 변경함으로써
                Text 편집기를 변경할 수 있다.
    ◈파일명을 쓰지 않고 EDIT명령어를 사용할 때, 기본적인 파일명은 afiedt.buf이다.
        이 파일은 버퍼를 편집할 때마다 이 파일에 겹쳐쓰게 된다.
        현재의 디렉토리에 없는 파일명을 명시하면 SQL*Plus는 파일 이름을 묻는다.

    실습 : 따라하기

    SQL> SELECT first_name, last_name, title
         FROM s_emp
         WHERE dept_id = 41;
    SQL> save a
    SQL> GET a
    SQL> START a

     

3. SET 환경 명령어

SQL *Plus SET 명령어 Syntax

      SET 시스템변수값

    ◈SET명령어는 현재의 세션 환경을 제어한다.
    ◈로그인시 login.sql에는 실행되는 표준 SET 명령과 그 외의 SQL*Plus명령이 들어 있다.
    ◈login.sql을 수정하여 부가적인 SET 명령을 쓸 수 있다.
    ◈여기서 시스템변수는 세션 환경을 제어하는 변수이고, 값은 시스템변수의 값임

    ♠실습 : Login.sql 확인(C:\orawin95\doc\Login.sql)

    SQL> GET Login.sql    

         set numwidth 9
         set linesize 100
         set pagesize 24
         set timing on

     

  login.sql 파일을 이용한 기본값 설정

    ◈login.sql 파일에는 접속 때마다 필요한 표준 SET 명령과 그 외의 SQL*Plus 명령어들이 들어 있다. 접속할 때에 이 파일을 읽어서 명령어가 수행된다. 로그 아웃을 하면 사용자 정의 설정이 상실된다.
     

기본값 설정 변경

    ◈login.sql로 수행된 설정은 현재의 세션에서 변경될 수 있다. 해당 세션에 대해서만 변경된다. 로그 아웃을 하자마자 설정값이 상실된다. 설정값을 영구적으로 변경하려면 login.sql 파일에 추가한다.
     

♣ 유용한 SET 명령어

    SET 변수와 값

    설              명

    ARRAYSIZE {20|n}

    데이터베이스의 데이터 인출 크기 설정

    COLSEP    {|text}

    Column사이에 출력될 문자를 설정

    ECHO      OFF|ON

    파일이 수행될 때 SQL *Plus명령어의 표시 여부를 결정

    FEEDBACK  {6|n|OFF|ON}

    Feedback 설정

    HAEDING   {OFF|ON}

    Column의 Hading 출력여부를 결정

    LINESIZE  {80|n}

    보고서의 라인당 문자의 수를 설정

    LONG      {80|n}

    LONG값을 표시하는 최대 폭을 결정

    PAGESIZE  {24|n}

    출력 페이지당 라인의 수를 명시

    PAUSE     {OFF|ON|text}

    단말기의 화면 이동을 제어함

    ◈ 예를 들어, SHOW PAUSE와 같이 현재의 설정 값을 보려면 SHOW 명령문을 사용한다.
    ◈ 모든 SET 변수값을 보려면, SHOW ALL 명령어를 사용한다.
    ◈ n값은 숫자값을 나타낸다.
    ◈ 밑줄 그은 값은 기본값을 나타낸다. 만일 변수에 값이 없으면, SQL*Plus는 기본값을 사용한다.

     

4. SQL *Plus 포멧 명령어

◈보고서의 특성을 제어할 수 있다.

    명  령  어

    옵  션                       설        명

    COLUMN [Column][옵션]

    CLEAR              Column의 형식을 WLDNA

    FORMAT형식        Column의 데이터 표시형식 설정

    HEADING text       Column의 Heading 설정

    JUSTIFY {정렬}     Column의 Headin을 왼쪽, 중앙, 오른쪽으로 정렬

    예> COL  last_name HEADING 'Employee|Name ' FORMAT A15
    예> COL  salary JUSTIFY LEFT FORMAT $99,999.00

    TTITLE [text|OFF|ON]

    보고서의 각 페이지 상단에 나타나는 머리글을 명시
    예> TTITLE 'Salary|Report'

    BTITLE [text|OFF|ON]

    보고서의 각 페이지 하단에 나타나는 머리글을 명시

    BREAK [ON]
       element[action]]

    라인 넘김을 써서 중복값을 배제

    COLUMN        Break가 일어날 column명을 명시한다.

    REPORT      총계를 내도록 보고서 레벨의 그룸을 생성 한다.

    SKIP n|PAGE  Break값의 변경시 n개의 행을 건너뛰거나 새로운 페이지로 이동한다.

    DUPLICATES    중복값을 출력한다.

    NODUPLICATES      중복값을 출력하지 않는다.

    예> BREAK ON title SKIP 1 ON RREPORT

    COMPUTE 함수 [LABEL]…
       OF  column…
       ON  break column

    합계을 계산함.
    column명, 식 또는 column의 alias
    column명, 식, column의 alias, REPORT키워드

    예> BREAK ON title SKIP 1 ON REPORT
        COMPUTE SUM LABEL 'Subtotal' OF salary ON title

     

스크립트 파일

    ◈명령어의 값을 포맷하고 재설정하는 데에 사용되는 SQL SELECT 문장과 Plus 명령어로 구성된
       스크립터 파일(또는 명령어 파일)을 만들 수 있다.
    ◈스크립터 파일은 문장에 대한 특정한 SQL 문장과 Plus 설정 값을 저장하는 데 유용하다.
    ◈추가적으로, 기본적인 Plus 명령어를 갖는 파일을 생성할 수 있는데 언제든지 실행하여 설정 값을
       재설정할 수 있다. 이 파일은 명령어 파일 안에서 실행 될 수 있다.
    ◈모든 형식 명령어는 Plus 세션이 끝나거나 형식 설정이 변경될 때까지 유효하다.
    ◈보고서를 작성한 후에는 Plus의 설정을 기본값으로 재설정하라.
    ◈SQL*Plus 변수 값을 기본값으로 설정하기 위한 명령은 없다.
    ◈특정 값을 알지 못하면 로그아웃을 하고 나서 다시 로그인해야 한다.
    ◈ Column에 대한 alias를 주는 경우, Column 이름이 아닌 alias를 참조해야 한다.
     

COLUMN 명령

    ◈COLUMN 명령을 사용하여 보고서의 Column의 표시 형식을 제어한다. 예를 들어, Heading,폭,
       형식을 변경할 수 있다.
          COL[UMN] [{Column|alias} [옵션]]

    ◈COLUMN명령어 옵션

    옵션

    설명

    CLE[AR]

    Column의 형식을 지움.

    FOR[MAT] 형식

    Column 데이터의 표시 형식을 설정.
    예:COLUMN last_name
    예:COLUMN last_name CLEAR

    HEA[DING] 텍스트

    Column의 Heading 설정.
    예:COL last_name HEADING 'Employee|Name' FORMAT A15
    예:COL salary JUSTIFY LEFT FORMAT $99,990.00

    JUS[TIFY] {정렬}

    Column의 Heading을 왼쪽,중앙,또는 오른쪽에 정렬함.

    ※ 명령이 길다면, 현재의 행 끝에 하이픈(-)을 써서 다름 행에 계속 쓸 수 있다.
     

Column 형식 모델 요소의 예

    요소

    설명

    결과

    An

    문자와 날짜 Column에 대해 n만큼의 폭으로 출력 설정

    N/A

    N/A

    9

    자리표현수

    999999

    1234

    0

    앞에 0을 붙임

    909999

    01234

    $

    달러 부호의 표시

    $9999

    $1234

    L

    국내 통화 표시

    L9999

    L1234

    .

    소숫점의 위치를 표현

    9999.99

    1234.00

    ,

    천 단위 구분자 표시

    9,999

    1,234

    ※ Oracle7 Server는 결과 값이 형식 모델에서 제공하는 정수의 자리수를 초과하면
        파운드 부호(#) 문자열을 출력한다.
     

TTITLE과 BTITLE 명령

    ◈페이지 머리글을 형식화하는 데에는 TITLE 명령을 사용하고, BTITLE 명령은 바닥글을 형식화하는
       데에 사용한다.  바닥글은 PAGESIZE값에 따라 페이지의 끝에 출력된다.
          TTI[TLE] [[텍스트|변수]  [OFF|ON]  또는 BTTI[TLE] [[텍스트|변수]  [OFF|ON]
    ◈날짜는 왼쪽, 텍스트는 중앙, 페이지번호는 오른쪽끝에 기본 설정값을 출력한다.
    ◈여러 행에 결쳐 제목에 대한 텍스트를 쓰려면 ( | )를 사용한다.
    ◈설정값의 출력과 해제

    명령어

    설명

    TTITLE

    머리글에 대한 현재의 설정값을 출력.
    예: SQL> TTI 'Salary | Report'

    TTITLE OFF

    머리글을 출력하지 않음.

    HEA[DING] BTITLE

    바닥글에 대한 현재의 설정값을 출력.

    BTITLE OFF

    바닥글을 출력하지 않음.


BREAK 명령

    ◈BREAK 명령을 사용하여 보고서를 보기좋게 할 수 있다.
    ◈BREAK 명령어는 column에 대해 중복값을 감추고,변경할때마다 한 행씩 건너뛴다.
    ◈COMPUTE 명령에 사용될 시 그룹을 생성한다.
         BRE[AK]  [ON element [action]]
    ◈BREAK명령어 옵션

    단위요소 또는 작업

    설명

    COLUMN

    Break가 일어날 Column명을 명시한다.

    REPORT

    총계를 내도록 보고서 레벨의 그룹을 생성한다.

    SKI[P] n|PAGE

    Break값의 변경시 n개의 행을 건너뛰거나 새로운 페이지로 이동한다.

    DUP[LICATES]

    중복값을 출력한다.

    NODUP[LICATES]

    중복값을 출력하지 않는다.


♣ COMPUTE 명령

    ◈COMPUTE 명령을 써서 합계와 같은 함수를 수행할 수 있다.
    ◈함수 :  AVG, COUNT, MAXIMUM, MINIMUM, STD
    ◈COMPUTE 명령에 사용될 시 그룹을 생성한다.

      COM[PUTE]  함수  [LAB[EL] 텍스트]…

             OF   column….    ON   break cloumn
       

    실습 : 직급별로 상원의 급여 합계를 계산한다.

    SQL> compute  sum of  SALARY on title


    실습 : 부서번호별로 직원수 및 평균급여를 계산한다.

    SQL> comp  count avg of  SALARY on dept_id report

     

보고서 수행하기 위한 스크립트 파일 생성 단계

    1. SQL 프롬프트에서 SQL SELECT문을 생성한다.
    2. SELECT 문장을 스크립트 파일에 저장한다.
    3. SQL *Plus 명령을 추가하기 위해 스크립트 파일을 저장한다.
    4. SELECT문장 전에 필요한 Format을 설정한다.
    5. SELECT문장 뒤에 ";"이나 "/" 같은 실행문자를 입력한다.
    6. SELECT문장 이후에 포멧팅 명령을 해제하는 SQL *Plus명령을 추가한다.
    7. 변경된 스크립트 파일을 저장한다.
    8. 스크립트를 실행하기 위해 START파일명이나 @파일명을 입력하여 스크립트 파일을 실행한다.
     

♣ 보고서 생성

    ◈머리글과 바닥글 생성
    ◈그룹 사이에 페이지 구분과 라인 넘김 추가
    ◈데이터 출력형식 변경
    ◈중복 데이터 제거
    ◈소계와 총계의 표시
    ◈Column의 Heading변경

    실습 : 부사장이나 창고 관리자가 아닌 모든 사원의 직급,성 및 월급을 출력하는 보고서를 만드는
               스크립트 파일을 작성한다.
               동일한 직급은 1번만 출력하고 직급별 그룹마다 한 행을 띄울 수 있도록 명령 파일을 편집하고,
                각 직급별 급여 소계및 모든 사원 급여의 총계를 계산.

    REM ** This report covers all employees who are not
    REM ** Vice presidents or warehouse manages.
    SET ECHO OFF
    SET PAGES 37                                  -- 1페이지에 37줄 출력
    SET LINES 60                                    -- 1줄에 60자 출력
    SET FEEDBACK OFF
    TTI 'Employee|Report'  
    BTI 'Confidential'
    COL title          HEA 'Job Category' FORMAT A22
    COL last_name HEA 'Employee'      FORMAT A22
    COL salary      HEA 'Salary'           FORMAT $99,999.99
    BREAK ON title SKIP 1 ON REPORT
    COMPUTE SUM LABEL 'Subtotal'        OF salary ON title
    COMPUTE SUM LABEL 'Grand Total' OF salary ON REPORT
    REM **Insert SELECT statement
    SELECT title, last_name, salary
    FROM s_emp
    WHERE title NOT LIKE 'VP%'
    AND title <> 'Warehouse Manager'
    ORDER BY title, last_name, salary
    /