치환 변수 및 Bind 변수
===================================
SQL*Plus : 치환 변수 및 Bind 변수
===================================
# 치환 변수 : 교재 2-22 : &, &&, define, undefine, accept
:
http://download.oracle.com/docs/cd/B10501_01/server.920/a96539/scripts.htm#31516
#
& 에 관한 설명
SQL> select * from emp
2 where deptno = &sv_deptno;
-- 위와 같은 명령을 치면
-- 아래와 같이 sv_deptno의 값을 입력하라는 메세지를 나타낸다.
Enter value for sv_deptno: 10
-- 10을 입력하면 deptno = 10 에 대한 결과가 select 된다.
SQL> /
-- '/'는 이전 sql문을 다시 실행하겠다는 의미이다.
-- 위의 sql문을 다시 실행하고 또 sv_deptno를 입력하라고 한다.
Enter value for sv_deptno: 30
-- 30을 입력하면 이번엔 deptno=30에 대한 결과를 select한다.
--------------
SQL> select * from emp
2 where ename = &sv_ename;
Enter value for sv_ename: SMITH
에러 : ORA-00904: "SMITH": invalid identifier
-- 그냥 문자를 입력하면 error다. quota''안에 넣어야한다.
SQL> /
-- 다시 실행
Enter value for sv_ename: 'SMITH'
-- 'SMITH'를 입력, ename='SMITH'에 대해 select 함
SQL> select * from emp
2 where ename = upper('&sv_ename');
Enter value for sv_ename: sMiTH
-- 애초에 받아들일 때 upper('&sv_ename')이라고 하면 sMiTH라고 입력을 해도 SMITH라고 입력하고 quota안에 넣어서 처리한다.
#
&& 에 관한 설명
SQL> select empno, ename, &&col_name
2 from emp
3 order by &col_name;
Enter value for col_name: deptno
-- &&를 사용해서 입력된 deptno는 저장되고, 3행에서 order by절에서도 deptno가 사용된다.
SQL> define
-- 현재 define되어있는 목록을 볼 수 있다.
-- 기본적으로 수개가 정의되어 있다.
-- 위의 &&가 포함된 select문을 실행하고 define으로 확인하면,
DEFINE COL_NAME = "deptno" (CHAR)
-- 위와 같이 정의되있는 것을 볼 수 있다.
SQL> ed s1.sql
-- ed [파일명]을 하면, 파일이 존재하면 그 파일이 열리고, 존재하지 않으면 새로만든다.
-- instant client batch파일이 있는 곳에 생성된다.
select empno, ename, &&col_name
from emp
order by &col_name;
undefine col_name
-- empno와 ename, 그리고 추가로 하나의 입력될 값을 출력하고, 입력한 값으로 order by 하는 기능
-- 마지막줄에 undefine을 하여 한번 저장된 값을 지운다.
SQL> @s1
-- 골뱅이 s1을 하면 아까 저장한 s1파일이 실행된다.
Enter value for col_name: deptno
SQL> @s1
Enter value for col_name: sal
SQL> @s1
Enter value for col_name: comm
#
Accept에 관한 설명
SQL> ed s2
-- 새로운 s2 메모장을 연다.
accept sv_deptno number prompt '부서 번호를 입력하세요 : '
select * from emp
where deptno = &sv_deptno;
-- sv_deptno라는 값을 number로 받아들이는데, 그 프롬프트를 '부서 번호를 입력하세요 : '라고 한다. 입력된 값을 deptno = 에 이어 실행.
-- accept의 기능은 치환변수를 입력 받는 프롬프트를 변경하는 것
SQL> @ s2
부서 번호를 입력하세요 : 10
SQL> define
DEFINE SV_DEPTNO = 10 (NUMBER)
-- s2를 실행한 후 define으로 확인해보면 맨 밑에 줄에 위와 같이 정의되어있는 것을 볼 수 있다.
#
define
SQL> ed s3
define sv_deptno=30
select * from dept
where deptno = &sv_deptno;
select * from emp
where deptno = &sv_deptno;
select * from emp e, dept d
where e.deptno = d.deptno
and d.deptno = &sv_deptno;
undefine sv_deptno
-- define을 해서 변수에 값을 지정하면 &을 사용해서 매번 값을 물을 때마다 define된 값을 사용한다.
SQL> @ s3
#
&숫자
SQL> ed s4
select empno, ename, &1
from emp
where deptno = &2;
-- &1, &2를 지정해 놓고SQL> @s4 sal 10
--@s4를 실행하면서 sal 과 10을 파라미터로 주면, &1=sal, &2=10이 저장되어 실행된다.
SQL> @s4 comm 30
-- 위와 마찬가지
- &숫자 + define + 여러 파일 연동
SQL> ed a001.sql
define deptno = &1
select * from dept
where deptno = &deptno;
SQL> @a001 10
SQL> ed a002.sql
define sal = &1
select * from emp
where sal >= &sal;
SQL> @a002 1000
SQL> ed mksam.sql
define sv_deptno = &1
define sv_sal = &2
@a001 &sv_deptno
@a002 &sv_sal
SQL> @mksam.sql 10 1000
--파일을 실행할 때 여러개의 파일을 연동하여 실행해도 가능 - column 명령의 new_value 옵션 : http://blog.naver.com/orapybubu/40067499679
SQL> ed s5
col avg_sal new_value sv_avg_sal
select avg(sal) as avg_sal
from emp;
select * from emp
where sal > &sv_avg_sal;
SQL> @s5
# Bind 변수 (Host 변수)
SQL> variable gv_sal number
-- gv_sal 이라는 number형태의 변수를 만든다.SQL> begin
2 select sal into :gv_sal
3 from emp
4 where empno = 7788;
5 end;
6 /
-- gv_sal이라는 곳에다가 empno가 7788인 사원의 sal을 넣는다. -- ... sal into :gv_sal ...
SQL> print gv_sal
GV_SAL
----------
3000
-- gv_sal을 출력해본다.SQL> select * from emp
2 where sal >= :gv_sal;
-- :gv_sal 을 사용해서 앞서 저장된 gv_sal을 사용할 수 있다.
댓글 없음:
댓글 쓰기