Oracle Database SQL*Plus
안녕하세요. 지티플러스입니다.
이번 게시글에서는 SQL*Plus 시작, 종료, 명령어 입력 및 실행을 다룹니다.
지난 글에서 예제 테이블을 생성하셨다면, SQL*Plus 사용을 시작해보겠습니다.
SQL*Plus를 시작하기 위해서는 다음의 단계를 수행합니다. OS 환경에 따라 프롬프트는 다르게 나타날 수 있습니다. 아래 예제는 Oracle Linux Server release 8.3에서 진행됩니다.
1. Oracle 프로세스 확인 및 Oracle 호스트 운영 체제 접속
ps -ef | grep pmon 또는 ps -ef | grep smon을 통해 Oracle 관련 필수 프로세스를 조회합니다. ora_pmon[smon]_$ORACLE_SID로 조회되는 것이 있다면, Oracle 호스트 운영 체제로 접속합니다.
2. SQL*Plus 시작
SQLPLUS 명령어를 입력하면 SQL*Plus를 시작할 수 있습니다. 일부 운영 체제에서는 소문자로 명령어를 입력해야 합니다.
3. 사용자명 및 암호 입력
Enter user-name에 접속하고자 하는 사용자명을 입력하고, 암호를 입력합니다.
위와 같은 방법 이외에도 SQL*Plus를 바로 시작할 수 있습니다. SQLPLUS 명령어 다음에 사용자명과 암호를 슬래시(/)구분하여 입력할 수 있습니다.
SQL*Plus 작업을 완료하고 운영 체제로 되돌아 가려면, EXIT 명령어를 입력합니다.
SQL*Plus는 접속을 해제한 Oracle 버전이 나타난 뒤, 운영 체제 프롬프트가 나타납니다.
SQL*Plus가 수행할 작업을 지정하려면 원하는 명령어를 입력하기만 하면 됩니다. 일반적으로 공백이나 탭으로 명령어의 각 단어를 구분하고, 대문자나 소문자로 명령어를 입력합니다.
명령 프롬프트에는 다음 세 가지 종류의 명령어를 입력할 수 있습니다.
1. SQL 명령어 : 데이터베이스의 정보를 사용하여 작업
2. PL/SQL 블록 : 데이터베이스의 정보를 사용하여 작업
3. SQL*Plus 명령어 : 질의 결과의 서식을 지정하고 옵션을 설정하며, SQL 명령어와 PL/SQL 블록을 편집하여 저장
예를 들어, SQL*Plus 명령어에 대한 온라인 도움말을 보려면 명령 프롬프트에 HELP 다음 명령어 이름을 입력하면 됩니다.
SQL 명령 언어를 사용하여 데이터베이스의 데이터를 조작할 수 있습니다. 개별 단어가 여러 행에 걸쳐 분리되어 있지 않는 한 원하는 위치에서 구분 행으로 분리할 수도 있고, 한 행에 입력할 수도 있습니다. EMP 테이블을 활용한 예제는 다음과 같습니다.
SQL*Plus는 결과를 표시하고 행 수를 읽어 들인 후에 다시 명령 프롬프트를 표시합니다. 시스템 변수 PAGESIZE의 설정에 따라 출력에 머리글이 반복되어 나올 수 있습니다.
결과 하단에 출력되는 읽어 들인 레코드 수와 관련된 메시지는 시스템 변수 FEEDBACK의 설정에 따라 결정됩니다. 설정을 OFF할 경우, 레코드 수를 표시하지 않습니다.
SQL 명령어를 종료하기 위해서는 세 가지 방법을 이용할 수 있습니다.
1. 세미콜론(;) 사용
세미콜론(;)은 명령어의 끝을 의미하여 명령어를 실행하도록 SQL*Plus에 지시합니다. 마지막 행 끝에 세미콜론을 입력하고 리턴하면, SQL*Plus는 명령어를 처리하고 SQL 버퍼에 저장합니다. DEPT 테이블을 활용한 예제는 다음과 같습니다.
2. 한 행에 슬래시(/) 사용
슬래시를 입력하고 다시 리턴하면, SQL 버퍼에 저장되어 있던 이전 명령어를 실행하게 됩니다.
3. 빈 행 사용
빈 행은 명령어 입력이 끝났지만 아직 실행하지 않겠다는 내용을 SQL*Plus에 지시하는 것입니다.
여기서 SQL 버퍼는 SQL*Plus가 가장 최근에 입력된 SQL 명령어나 PL/SQL 블록을 저장하는 영역을 말합니다. 다른 명령어나 블록을 입력할 때까지 저장된 명령어나 블록이 버퍼에 남아 있어, 다시 입력하지 않고도 편집하거나 실행할 수 있습니다.
단, SQL*Plus 명령어는 SQL 버퍼에 저장되지 않습니다.
SQL 명령어와 마찬가지로 PL/SQL 하위 프로그램(블록)을 사용하여 데이터베이스의 데이터를 조작할 수 있습니다. SQL*Plus에 PL/SQL 하위 프로그램을 입력하려면 PL/SQL 모드로 실행해야 합니다. PL/SQL 모드는 다음과 같은 경우에 실행할 수 있습니다.
1. SQL*Plus 명령 프롬프트에 DECLARE 또는 BEGIN 명령어를 입력한 뒤, 나머지 PL/SQL 하위 프로그램을 입력합니다. 다음과 같이 SQL 버퍼에 저장된 하위 프로그램을 실행하기 위해서는 RUN이나 슬래시(/)를 입력합니다. 세미콜론(;)으로는 실행할 수 없습니다.
2. 내장 프로시저를 작성하는 SQL 명령어를 입력하여 작성하려는 내장 프로시저(PL/SQL 함수, 패키지, 프로시저 등)를 입력합니다. 사용 가능한 명령어는 다음과 같습니다.
- CREATE FUNCTION
- CREATE LIBRARY
- CREATE PACKAGE
- CRAETE PACKAGE BODY
- CREATE PROCEDURE
- CREATE TRIGGER
- CREATE TYPE
이러한 명령어를 입력하면 PL/SQL 모드로 들어가게 되며, PL/SQL 하위 프로그램을 입력할 수 있습니다. PL/SQL 하위 프로그램 입력이 완료되면 행에 마침표(.)를 입력하여 종료합니다.
SQL 명령어와 마찬가지로 내장 프로시저를 작성하려면 RUN이나 슬래시(/)를 입력해야 하며, 세미콜론(;)을 입력하면 실행되지 않습니다. CREATE 명령어를 사용하여 내장 프로시저를 작성하면 컴파일 오류의 유무에 따라 메시지가 다르게 나타납니다.
SQL*Plus 명령어를 사용하여 SQL 명령어와 PL/SQL 블록을 조작하고 질의 결과의 서식을 지정하여 인쇄할 수 있습니다. EMP 테이블을 사용하여 서식을 변경하는 예제는 다음과 같습니다.
COLUMN 명령어를 통해 달러 기호($)와 쉼표(,)를 사용하여 SAL 열의 서식을 지정하고 새 머리글을 설정(SAL → SALALRY)한 뒤, RUN 명령어를 입력하여 가장 최근 질의를 다시 실행합니다. 앞서 언급했듯이, SQL*Plus 명령어는 SQL 버퍼에 저장하지 않습니다.
만약, 추가 행에 긴 SQL*Plus 명령어를 계속 입력하고 싶다면, 행 끝에 하이픈(-)을 입력하고 리턴하면 됩니다. 원하는 경우에는 하이픈 앞에 공백을 입력할 수도 있습니다.
SQL*Plus는 이러한 하이픈을 연장 문자로 식별하기 때문에 SQL 문에서 하이픈 입력을 무시합니다. 입력 프로세스가 앞뒤 행을 연결하고 하이픈을 제거하기 전에는 해당 명령문을 SQL 문으로 인식하지 않기 때문에 오류가 반환됩니다.
반환된 오류를 해결하고 명령문이 바르게 해석되었는지 확인하려면, 행의 끝에서 하이픈을 이동합니다.
SET 명령어는 SQL*Plus가 명령어를 실행하는 방법에 영향을 주는 여러 가지 변수(시스템 변수)의 설정을 제어합니다. 이러한 시스템 변수를 SET 명령어 변수라고도 하며, 결과의 기본 열 너비, 레코드 수 표시 여부, 페이지 크기 등을 제어할 수 있습니다.
변수의 현재 설정을 확인하려면 SHOW 명령어 다음에 변수 이름을 입력하면 됩니다.
DML 명령어(UPDATE, INSERT, DELETE)로 데이터베이스에 저장된 정보에 대한 변경 내용을 지정할 수 있습니다. DML 명령은 자동으로 커밋되지 않기 때문에, COMMIT 명령어를 입력하거나 SET 명령어를 통해 자동 커밋 기능을 사용하는 등 여러 방법을 통해 변경사항을 저장해야 합니다.
SQL*Plus 자동 커밋 기능을 사용할 경우 지정된 수의 DML 트랜잭션이 실행된 후에 미결 중인 변경 내용이 커밋됩니다. SET 명령어의 AUTOCOMMIT 변수를 통해 제어가 가능하며, 다음과 같은 형식을 갖습니다.
1. SET AUTOCOMMIT ON : 자동 커밋 설정
2. SET AUTOCOMMIT OFF : 자동 커밋 해제(기본값)
3. SET AUTOCOMMIT n : n개의 SQL 명령어나 PL/SQL 블록 다음에 변경 내용 커밋
4. SET AUTOCOMMIT IMMEDIATE : 자동 커밋 설정
자동 커밋 기능이 설정되어 있으면 데이터베이스에 대한 변경 내용을 롤백할 수 없으므로 주의해야 합니다.
여러 페이지 분량의 보고서 중 첫 번째 페이지를 표시하고 나머지 페이지는 볼 필요가 없다고 결정한 경우 [Cancel]을 누릅니다. SQL*Plus의 쿼리 실행을 중지하고 명령 프롬프트로 되돌아가기 위한 키보드 버튼은 ‘Ctrl + C’입니다. 단, SPOOL 명령어의 OUT절을 사용하여 프린터로 보낸 파일 인쇄는 중지하지 않습니다.
TIMI[NG] 명령어를 사용하여 하나 이상의 명령어나 블록을 실행하는데 사용되는 컴퓨터 자원의 양에 대한 데이터를 수집하여 표시할 수 있습니다. 이렇게 수집된 데이터는 타이머에 있는 기간 동안 저장됩니다.
만약, 모든 타이머를 삭제하고 싶다면 명령 프롬프트에 CLEAR TIMI[NG]를 입력합니다.
SQL*Plus 명령 프롬프트에서 호스트 운영 체제 명령어를 실행할 수 있습니다. 실행하고자 하는 호스트 운영 체제 명령어 앞에 HOST 명령어나 느낌표(!)를 입력하면 실행됩니다. 호스트 명령어 실행이 완료되면 SQL*Plus 명령 프롬프트가 다시 나타납니다.
DESC[RIBE] 명령어를 사용하면 테이블의 각 열에 대한 정의를 확인할 수 있습니다. DEPT 테이블을 활용하여 조회한 결과는 다음과 같습니다.
DESCRIBE 명령어는 Oracle 데이터 딕셔너리의 정보에 액세스합니다. 여기서 데이터 딕셔너리란 사용자, 데이터 저장, 권한에 관한 관리 정보를 포함한 오라클 데이터베이스 서버에 의해 자동으로 작성되고 갱신된 테이블 및 뷰 집합입니다.
데이터 딕셔너리는 오라클이 처음 설치될 때 설치되며, 오라클 데이터 서버 자체와 모든 오라클 사용자를 위한 정보의 중요한 원천입니다. 테이블은 오라클에 의해 자동으로 유지되며, 카탈로그라고도 합니다.
함수나 프로시저의 정의를 보기 위해서도 DES[CRIBE] 명령어를 사용합니다.
매개변수와 LOC 컬럼이 일치하는 결과값을 GET_LOC 프로시저는 다음과 같이 생성했습니다.
긴 보고서나 열이 많은 테이블의 정의를 표시하는 동안 화면의 내용 출력을 중지하고 살펴보려는 경우 [Pause]를 누르고, 다시 재개하려면 [Resume]을 누르면 됩니다. [Pause]나 [Resume] 버튼은 사용하는 환경에 따라 다를 수 있습니다.
원하는 경우에는 SET 명령에 PAUSE 변수를 사용하여 질의나 보고서의 각 화면을 표시한 다음 중지하도록 설정할 수도 있습니다.
SQL*Plus가 명령어에서 오류를 발견한 경우, 사용자에게 유용한 오류 메시지를 표시합니다.
지금까지 SQL*Plus 기초에 대해 알아보았습니다.
SQL*Plus 명령어에 대한 자세한 활용 방법은 다음에 이어서 설명하겠습니다.