* SELECT 문의 처리 과정
1) parsing
- SQL문장을 기계어로 바꾸는 과정
1. 문법검사
- 맞는 문법인지 검사
2. 의미검사
- emp테이블이 있는지 확인, scott가 emp 테이블의 액세스할수 있는 권한이 있는지 확인
- parsing의 경우 CPU를 많이 사용하기 때문에 파싱한 결과를 공유풀(shared pool)에 올려두게 됨.
- 공유풀에 올리는사항 => 다음에 똑같은것이 오면 파싱과정을 생략하기 위해서
1. SQL문장
2. 실행계획
3. Parse Tree(기계어)
2) execute
메모리에 로드 처리 실행
3) fetch
SQL결과를 클라이언트에서 전달하는 과정
# 쿼리 실행후 실제 공유 메모리에 해당 쿼리문이 올라 갔는지 확인 하기
C:\>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 수 3월 16 18:55:24 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
다음에 접속됨:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select ename, sal from scott.emp where empno=7788;
ENAME SAL
---------- ----------
SCOTT 3000
SQL> -- shared pool에 있는 SQL문장 확인
SQL> select sql_text from v$sql where sql_text like '%scott.emp%';
SQL_TEXT
--------------------------------------------------------------------------------
select ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
SQL>
# SQL에서 똑같은 문장이란?
1. 대소문자구분
2. 공백, 들여쓰기, 탭구분
3. 리터럴 SQL구문 => 바인드 변수 처리
# 대소문자구분을 하였을경우 공유메모리에 2개가 존재하는것 확인
C:\>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 수 3월 16 18:55:24 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
다음에 접속됨:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select ename, sal from scott.emp where empno=7788;
ENAME SAL
---------- ----------
SCOTT 3000
SQL> -- shared pool에 있는 SQL문장 확인
SQL> select sql_text from v$sql where sql_text like '%scott.emp%';
SQL_TEXT
--------------------------------------------------------------------------------
select ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
SQL> -- 대문자로 해당쿼리문을 실행시
SQL> SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788;
ENAME SAL
---------- ----------
SCOTT 3000
SQL> -- shared pool에 있는 SQL문장 확인
SQL> select sql_text from v$sql where sql_text like '%scott.emp%';
SQL_TEXT
--------------------------------------------------------------------------------
select ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
select sql_text from v$sql where sql_text like '%scott.emp%'
SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788
SQL>
SQL> -- 공백을 많이 띄워서 실행시
SQL> select ename, sal from scott.emp where empno=7788;
ENAME SAL
---------- ----------
SCOTT 3000
SQL> -- shared pool에 있는 SQL문장 확인
SQL> select sql_text from v$sql where sql_text like '%scott.emp%';
SQL_TEXT
--------------------------------------------------------------------------------
select ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
select sql_text from v$sql where sql_text like '%scott.emp%'
SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788
select ename, sal from scott.emp where empno=7788
SQL>
SQL> -- where조건절의 값을 바꿨을경우
SQL> select ename, sal from scott.emp where empno=7902;
ENAME SAL
---------- ----------
FORD 3000
SQL> -- shared pool에 있는 SQL문장 확인
SQL> select sql_text from v$sql where sql_text like '%scott.emp%';
SQL_TEXT
-------------------------------------------------------------------------------
select ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
select sql_text from v$sql where sql_text like '%scott.emp%'
SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788
select ename, sal from scott.emp where empno=7902
select ename, sal from scott.emp where empno=7788
6 개의 행이 선택되었습니다.
SQL>