파일 관리
파일 관리#
작업 결과 저장#
iSQL을 통해 작업한 결과를 지정한 파일로 저장하는 기능을 제공한다. 다음과 같이 spool 명령을 이용하면 지정한 book.txt 파일에 작업한 결과가 저장된다.
이 기능을 해제하고 싶으면 SPOOL OFF 명령을 사용한다.
예:
iSQL> SPOOL book.txt
Spool start. [book.txt] -- 이후의 모든 명령과 그 결과들이 book.txt 파일에 저장된다. 이 파일은 현재 디렉터리에 생성된다.
iSQL> SPOOL OFF
Spool Stop -- 더 이상 명령과 그 결과들을 파일에 저장하지 않는다.
스크립트 파일 실행#
@ 명령어#
@file_name[.sql]
START file_name[.sql]
- file_name[.sql]
수행될 스크립트 파일, 확장자를 생략하면 iSQL은 기본 스크립트 파일 확장자(.sql)로 간주한다.
iSQL 명령어와 SQL구문들이 저장된 스크립트 파일을 실행하면, 한번에 파일내의 명령어들을 순차적으로 실행한다.
@ 명령어는 START와 같은 기능을 갖는다.
-
스크립트 파일내의 exit 또는 quit 명령어는 iSQL을 종료시킨다.
-
스크립트 파일내에는 일반적으로 SQL문, iSQL 명령어, 또는 Stored Procedure 블록 등이 포함될 수 있다.
다음은 $ALTIBASE_HOME/sample/APRE/schema 디렉터리에 있는 스크립트 schema.sql을 현재 디렉터리에서 수행하는 예이다.
iSQL> START schema.sql -- 파일 내의 sql 문이 실행된다.
iSQL> @schema.sql
스크립트 파일을 명시할 때, 사용자 계정의 Altibase 홈 디렉터리($ALTIBASE_HOME)를 의미하는 물음표("?")를 사용할 수 있다.
다음은 $ALTIBASE_HOME/sample/APRE/schema 디렉터리에 있는 스크립트 schema.sql을 다른 디렉터리에서 수행하는 예이다.
iSQL> @?/sample/schema.sql
물음표("?")는 다음 iSQL 명령어에서도 사용할 수 있다:
- edit, save, load, spool, start
스크립트 파일 내에서 주석의 사용은 -- 또는 /* */으로 가능하다.
--는 이 표시 다음부터 그 라인의 끝까지를 주석으로 처리하고 여러 라인을 주석으로 처리할 때는 주석부분을 /*와 */ 사이에 넣으면 된다.
@@ 명령어#
@@file_name[.sql]
- file_name[.sql]
수행될 내포형 스크립트를 나타낸다. 확장자를 생략하면 iSQL은 기본 명령어 파일 확장자(.sql)로 간주한다.
명시된 스크립트를 수행한다. @@ 명령어는 @ 명령어와 유사한 기능을 갖는다.
이 명령어는 수행될 스크립트와 같은 경로에서 명시된 스크립트를 찾는 기능을 가지고 있기 때문에 내포형 스크립트를 수행하는데 유용하다.
@@ 명령어는 다음과 같은 용도로 쓰일 수 있다.
-
사용자가 임의의 스크립트 파일 내에 @@file_name.sql을 입력하고 그 스크립트 파일을 실행하면, iSQL은 file_name.sql을 호출한 스크립트 파일과 동일한 디렉터리에서 file_name.sql을 찾아서 수행한다. file_name.sql 은 이를 호출한 스크립트 파일과 같은 디렉터리에 있어야 한다. 만일 그런 파일이 존재하지 않으면, iSQL은 오류 메시지를 보여준다.
-
사용자가 iSQL 프롬프트 상에서 @@file_name.sql을 입력하여 실행하는 것은 @file_name.sql을 실행하는 것과 동일하다.
-
스크립트에는 일반적으로 SQL문, iSQL 명령어, 또는 Stored Procedure 블록 등이 포함될 수 있다.
-
스크립트 내의 exit 또는 quit 명령어는 iSQL을 종료시킨다.
다음은 $ALTIBASE_HOME 디렉터리에서 a.sql 스크립트 파일을 실행하는 예제로, 이 파일 내에서 schema.sql 스크립트 파일을 실행한다. 이 예제가 에러 없이 제대로 수행되려면, a.sql은 schema.sql파일이 위치하는 $ALTIBASE_HOME/sample/APRE/schema 디렉터리에 같이 있어야 한다.
iSQL> @sample/APRE/schema/a.sql
$ cat a.sql
@@schema.sql
참고: 이 후의 예제는 위의 스크립트를 실행해서 생성된 테이블들을 (부록 Schema 참고) 가지고 iSQL 환경에서 질의에 따른 결과를 편집한 것이다.
START 명령에 파라미터 전달#
START file_name[.sql] [param1 [param2] ...]
@file_name[.sql] [param1 [param2] ...]
@@file_name[.sql] [param1 [param2] ...]
- [param1 [param2] ...]
스크립트 파일에 파라미터로 전달할 값
스크립트 파일 내 SQL문의 특정 값을 고정하지 않고 사용자가 수행할 때마다 설정하고자 할 때 치환 변수를 사용한다. START, @ 또는 @@ 명령어로 스크립트 파일 수행 시, 치환 변수 자리에 대체하고자 하는 값을 입력하여 파라미터로 전달할 수 있다.
스크립트 파일 내의 치환 변수는 대체하고자 하는 자리에 &와 숫자를 붙여서 사용하며, 숫자는 순서를 의미한다. 단, 이 기능은 SET DEFINE ON이 설정된 경우에만 동작한다. 자세한 설명은 SET DEFINE을 참조하기 바란다.
예를 들어 아래와 같이 emp.sql 파일에 치환 변수가 사용된 경우
SELECT ENO, E_LASTNAME FROM EMPLOYEES
WHERE EMP_JOB = '&1'
AND SALARY > &2;
START 명령어 수행 시에 programmer, 2000을 파라미터로 같이 입력하면 &1에 programmer, &2에 2000 값이 대체되어 수행된다. 즉 직업이 programmer이고, 월급이 2000을 초과하는 직원이 조회된다.
iSQL> SET DEFINE ON; -- ON으로 설정해야 치환변수를 파라미터 값으로 대체
iSQL> START emp.sql programmer 2000
old 2: WHERE EMP_JOB = '&1'
new 2: WHERE EMP_JOB = 'programmer'
old 3: AND SALARY > &2;
new 3: AND SALARY > 2000;
ENO E_LASTNAME
-------------------------------------
10 Bae
iSQL은 치환 변수를 포함하고 있는 라인에 대하여 파라미터 값이 치환되기 전후의 SQL 명령을 함께 출력한다. SET VERIFY OFF를 설정하면 대입 후의 SQL명령은 출력되지 않는다. 치환 변수는 하나의 스크립트에서 여러 번 사용될 수 있으며, 반드시 순서대로 사용하지 않아도 된다.
치환 변수는 아래와 같이 대화식으로도 스크립트의 변수를 파라미터로 치환할 수 있다.
iSQL> START emp.sql
iSQL> SELECT ENO, E_LASTNAME FROM EMPLOYEES
WHERE EMP_JOB = '&1'
AND SALARY > &2;
Enter value for 1: programmer
old 2: WHERE EMP_JOB = '&1'
new 2: WHERE EMP_JOB = 'programmer'
Enter value for 2: 2000
old 3: AND SALARY > &2;
new 3: AND SALARY > 2000;
ENO E_LASTNAME
-------------------------------------
10 Bae
1 row selected.
또한 특정 문자를 치환 변수 뒤에 바로 연결하여 사용하려면, 마침표(.)를 사용하여 치환 변수와 문자를 구분해야 한다.
SELECT E_LASTNAME FROM EMPLOYEES WHERE ENO='&1.0';
Enter value for 1: 2
old 1: SELECT E_LASTNAME FROM EMPLOYEES WHERE ENO='&1.0';
new 1: SELECT E_LASTNAME FROM EMPLOYEES WHERE ENO='20';
SET DEFINE {ON|OFF}#
치환 변수가 포함된 스크립트 파일을 START, @ 또는 @@ 명령어로 수행 시, 치환 변수를 사용자가 입력한 파라미터 값으로 대체할지 여부를 지정한다.
기본값은 OFF로 사용자가 입력한 파라미터 값으로 치환 변수를 대체하지 않는다. 즉, 치환 변수가 포함된 스크립트 파일 수행 시에는 반드시 ON으로 지정해야 한다.
SET VERIFY {ON|OFF}#
치환 변수가 포함된 스크립트 파일을 START, @ 또는 @@ 명령어로 수행 시, 파라미터 값으로 교체되기 전후의 SQL문을 출력할지 여부를 지정한다.
기본값은 ON으로 전후 SQL문을 출력한다.
$ cat Param1.sql
SELECT * FROM T1 WHERE I1 = &1;
iSQL> SET DEFINE ON;
iSQL> SHOW VERIFY;
Verify : On
iSQL> START Param1.sql 5;
iSQL> SELECT * FROM T1
WHERE I1 = &1;
old 2: WHERE I1 = &1;
new 2: WHERE I1 = 5;
T1.I1 T1.I2
---------------------------
5 Hyacinth
1 row selected.
iSQL> SET VERIFY OFF;
iSQL> SHOW VERIFY;
Verify : Off
iSQL> START Param1.sql 5;
iSQL> SELECT * FROM T1
WHERE I1 = &1;
T1.I1 T1.I2
---------------------------
5 Hyacinth
1 row selected.
SQL문의 저장#
현재 iSQLbuffer에 있는 명령어 중 가장 최근에 수행한 명령어를 파일로 저장하는 기능이다.
이 파일은 현재 디렉터리에 생성된다.
iSQL> SELECT * FROM book;
iSQL> SAVE book.sql; -- book.sql 파일에 'SELECT * FROM book;'가 저장된다.
Save completed.
SQL문의 로드#
지정한 파일의 첫 번째 명령어를 iSQL 버퍼의 마지막 위치에 로드시키는 기능이다.
iSQL> LOAD book.sql
iSQL> SELECT * FROM book;
Load completed.
iSQL> / -- SELECT * FROM book; 문이 실행된 것을 볼 수 있다.
DML문 저장#
INSERT, UPDATE, DELETE, MOVE 등의 DML문 실행시 이를
$ALTIBASE_HOME/trc/isql_query.log
에 기록한다. 단, DML문 중 SELECT를 실행한 경우에는 로그에 기록되지 않는다.
이 기능을 설정하려면 SET QUERYLOGGING을 ON으로 하고, 해제하려면 OFF하면 된다.
iSQL> SET QUERYLOGGING ON; -- 이후의 모든 DML 문이 $ALTIBASE_HOME/trc/isql_query.log에 저장된다.
iSQL> CREATE TABLE T1 ( I1 INTEGER );
Create success.
iSQL> INSERT INTO T1 VALUES ( 1 );
1 row inserted.
iSQL> UPDATE T1 SET I1 = 2;
1 row updated.
iSQL> SELECT * FROM T1;
I1
--------------
2
1 row selected.
iSQL> DELETE FROM T1;
1 row deleted.
iSQL> DROP TABLE T1;
Drop success.
iSQL> EXIT
% cat $ALTIBASE_HOME/trc/isql_query.log # SET QUERYLOGGING ON으로 실행한 후의 DML을 확인할 수 있다.
[2009/09/16 10:36:14] [127.0.0.1:25310 SYS] INSERT INTO T1 VALUES ( 1 )
[2009/09/16 10:36:31] [127.0.0.1:25310 SYS] UPDATE T1 SET I1 = 2
[2009/09/16 10:36:37] [127.0.0.1:25310 SYS] DELETE FROM T1
질의문 편집#
최근 질의문 편집#
iSQL 상에서 파일을 생성하고 편집할 수 있도록 명령어 edit를 제공한다.
인수 없이 ed를 실행하면 가장 최근 실행된 질의문이 iSQL.buf 라는 임시 파일로 생성되며 다음과 같은 화면을 볼 수 있다. (지면을 절약하기 위해 몇 줄만 화면으로 표시한다.)
iSQL> SELECT sysdate FROM dual;
SYSDATE
---------------
01-JAN-2000
1 row selected.
iSQL> ed
SELECT sysdate FROM dual;
~
~
~
"iSQL.buf" 1L, 26C
기존 파일 편집#
존재하는 파일을 편집하기 위해서는 iSQL 상에서 ed 실행 시 그 파일 이름을 뒤에 넣으면 된다. 화면이 초기화 되어 있을 때 빈 줄은 ~(tilde) 문자로 표시된다.
iSQL> ed myquery.sql
"myquery.sql"
INSERT INTO employee(ENO, E_FIRSTNAME, E_LASTNAME, SEX) VALUES(21, 'MSJUNG', 'F');
INSERT INTO employee(ENO, E_FIRSTNAME, E_LASTNAME, SEX, JOIN_DATE)
VALUES(22, 'Joshua', 'Baldwin', 'M', TO_DATE('2001-11-19 00:00:00', 'YYYY-MM-DD HH:MI:SS'));
~
~"myquery.sql"
히스토리 목록에 있는 질의문 편집#
히스토리 목록에서 해당 번호를 사용하여 이전에 수행했던 명령을 편집할 수 있다. 즉, 해당 번호의 질의문이 iSQL.buf 임시 파일로 생성되어 편집을 할 수 있으며, 편집 결과는 히스토리의 마지막에 등록되어 가장 마지막 명령을 재수행하는 '/' 으로도 실행이 가능하다.
iSQL> h
1 : SELECT * FROM customers;
2 : SELECT * FROM employees;
iSQL> 2ed
or
iSQL> 2 ed
SELECT * FROM employees;
~
~
"iSQL.buf"
파일을 편집하기 위해서 명령 줄에 인수 2라는 파일 이름을 넣은 (iSQL> ed 2) 명령어와 구분된다.
편집 후 (employees를 orders로 변경)
iSQL> h -- 현재 iSQL buffer에 있는 히스토리 목록
1 : SELECT * FROM customers;
2 : SELECT * FROM employees;
: SELECT * FROM orders;
-- 2 ed 명령어에 의해 편집된 질의문이 히스토리 목록에 가장 마지막 명령어로 저장된다.
iSQL> / -- 가장 최근에 수행한 명령어가 실행된다.
ONO ORDER_DATE ENO CNO GNO QTY ARRIVAL_DATE PROCESSING
-----------------------------------------------------------------------------------------------------------------------------
11290007 29-NOV-2011 12 3 A111100002 70 02-DEC-2011 C
11290011 29-NOV-2011 12 17 E111100001 1000 05-DEC-2011 D
…
12310012 31-DEC-2011 19 1 C111100001 250 03-JAN-2012 O
30 rows selected.
주의사항#
파일 이름에 특수 문자 또는 공백이 포함된 경우 큰따옴표를 사용해야 한다.
iSQL> SPOOL "file name.txt";
iSQL> START "file name.sql";
iSQL> EDIT "file name.sql";