치환변수(Substitution Variable)
-----------------------------------
1. 일시적으로 값을 저장하기위해 SQL*Plus의 치환변수를 사용한다.
a. 단일 엠퍼센드(&)
- 사용자는 단일엠퍼센드가 앞에 붙은 치환변수를 써서 동적으로 행을
제한한다.
- 명령이 실행될때마다 사용자에게 입력을 요구한다.
SQL>select id, last_name, salary
from s_emp
where dept_id = &department_number;
Enter value for department_number: 31
SQL>select id, &column_name
from s_emp
where &condition;
Enter value for column_name : total
Enter value for condition : payment_type = 'CASH'
b. 이중 엠퍼센드 치환변수(&&)
- 매번 사용자에게 Prompt하지않고 변수값을 재사용하려 할때 사용한다.
- 프롬프트는 한번만 나타남
- SQL*Plus에서는 입력된 값을 저장하고 해당 변수 이름을 참조할때마다
값을 재사용한다.
SQL>select id, &&column_name
from s_ord
order by &column_name;
Enter value for column_name : total
c Set Verify명령
SQL문장상에 대한 변경사항을 확인 할려면 SQL*Plus의 SET VERIFY 명령을 사용한다. SET VERIFY를 ON으로 설정하면 SQL*Plus는 치환변수를 값으로 바꾸기 전후의 값을 출력한다.
SQL*Plus에서 사용자변수정의
1. 두개의 SQL명령을 사용하여 변수를 미리 정의한다.
- DEFINE : CHAR Data유형의 사용자 변수생성, UNDEFINE명령으로 해제함
- ACCEPT : 사용자의 입력을 읽어에 저장
- 두명령모두 변수가 존재하지 않을때는 변수를 생성하며,존재할경우엔
자동으로 변수값을 재정의한다.
- SQL*Plus는 이중 엠퍼센드에대해 DEFINE명령을 실행한다.
- DEFINE 사용시 한개의 공백이 필요하면 공백을 단일 따옴표로
묶어야 한다.
- ACCEPT 명령에서 치환변수를 참조할때 SQL*Plus 치환변수에 &를
붙이면 안된다.
a. ACCEPT
- 사용자로부터 입력값을 받아들일때 작성
ACCEPT p_dname PROMPT 'Provide the department name: '
- Number또는 Date DataType의 변수를 명시적으로 정의한다.
ACCEPT p_salary NUMBER PROMPT 'Salary Amount : '
- 보안상의 이유로 사용자의 입력을 숨길때
ACCEPT passwd CHAR PROMPT 'PassWord : ' HIDE
예>
SQL> select ename
2 from emp
3 where job like '%&myJob%';
Enter value for myjob: CLERK
old 3: where job like '%&myJob%'
new 3: where job like '%CLERK%'
ENAME
----------
SMITH
ADAMS
JAMES
MILLER
SQL> set echo off
SQL> accept myJob prompt ' Enter Job : '
Enter Job : CLERK
SQL> select ename
2 from emp
3 where job like '%&myJob%';
old 3: where job like '%&myJob%'
new 3: where job like '%CLERK%'
ENAME
----------
SMITH
ADAMS
JAMES
MILLER
SQL> set verify off
SQL> accept myJob prompt ' Enter Job : '
Enter Job : CLERK
SQL> select ename
2 from emp
3 where job like '%&myJob%';
ENAME
----------
SMITH
ADAMS
JAMES
MILLER
b. UNDEFINE을 실행하거나 SQL*Plus를 빠져나올때까지 존재
DEFINE명령으로 내용을 확인할수 있다.
세션마다 특정변수를 지정할려면 변수가 시스템 시동시에 생성될수 있게
login.sql 파일을 이용하면 된다.
예>
SQL> define myJob = CLERK
SQL> define dname
symbol dname is UNDEFINED
SQL> define myJob
DEFINE MYJOB = "CLERK" (CHAR)
SQL> select ename
2 from emp
3 where job like '%&myJob%';
ENAME
----------
SMITH
ADAMS
JAMES
MILLER
|