PL/SQL Day1
PL-SQL Day 1
※학습절차
1. SQL & PL-SQL(35H↑) : RDBMS, SQL, PL-SQL
->DB조작언어, 사용자 인터페이스x
▶다음과정
<중급>
2. Fundamentals[Administration]-I(35H) : RDBMS 관리기법
3. Fundamentals-II : Backup & Recovery
◎성능저하 요인 2가지
①잘못된 Query -> SQL 튜닝
②DB구조 -> 서버튜닝
4. Performance Tuning(35H) : 서버튜닝
4-2. 기타과정(SQL-Statement tuning) : SQL 튜닝
5. Data Modeling(Analysis, Design)
<고급>
6. 대용량 DB 솔루션 : 성능
7. Data Architecture
<월-수>
01 - 02 : Oracle
03 - 11 : SQL
<목-금>
12 - 15 : PL-SQL
DBMS : File System의 한계 극복
①공유x
②공간낭비(공유에 대한 문제 해결을 위해 같은 데이터를 여러곳에 복사)
③불필요한 Operation 발생(데이터 동기화를 위해)
④무결성 보장x - 원하지 않는 데이터 저장x
DBMS ┌ DB2(IBM) ─ 최초 개발
├ Sybase ┐ Sybase 개발 엔지니어들이 SQL-Server 개발했음.
├ SQL-Server ┘ 구조 거의 똑같음
├ Oracle ─ 두번째로 나옴. DB2를 참조함
├ Infomix
└ AdaBas
SQL : 데이터를 Access 하기 위해 데이터베이스와 통신하는 언어
그래픽한 화면 디자인x
V6 V7 V8 V8i V9i V10g
SQL*PLUS Tool - for Developer, 9i부터 svrmgrl과 통합하여 이름 변경 SQL*PLUS(TCP-IP),
추가로 isqlplus(HTTP),
추가로 isqlplus를 위해서 Apache 웹서버
sqldba(old) - for DataBase Administrator, v8i부터 svrmgrl(Server*Manager)
기본계정
sys - 데이터베이스를 설치한 계정. OS의 Administrator와 유사한 역할
system - DB 관리자 계정
scott(Scott Andrew) - OS의 guest와 유사한 역할
hr -
scott 계정 생성
start C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\scott.sql
<file-system>
file > record(line) > field
<RDBMS>
table(entity) > Row(tuple) > Column(Attribue) [p.28 참조]
설계단계에서 사용 / (분석단계에서 사용)
<관계형데이터베이스란?>
목표: 중복제거, 똑같은 데이터가 반복된다면 File System과 같다. 예를들어 emp table의 부서명이 반복되는 것도 중복이다.
SQL*PLUS┌① 명령어prompt (Dos, Unix, Linux)
└② Client-WIndows용 [for client 프로그램 설치]
(SQL*PLUS-Tool[win, prompt], SQL*NET[Server, Client간(2-tier) 연결 통신 프로그램])
<Oracle 분류>
①Enterprise_Edition : 중소규모 이상 대규모 ┐ ┌ 추가옵션 o(JServer[JVM]:Java Class 저장)
②Standard_Edition : 중소그룹용(10~50명), ┤DBMS├ 추가옵션 x
③Personal_Edition : 개인용, ┘ (기본)└ Network 기능 x
④Express_Edition : (licesce 필요 x)
<학습목표>
- RDBMS 개념
- RDBMS를 구현하기 위한 문법
PL-SQL : Procedural Language
DQL(Data Query Language)
SELECT [distinct]|[all] 성명 as sabun, 주소 "address" 'distinct : 중복되는 값 제거, alias 할때 대,소문자 섞어서 쓸때 더블인용부호 사용
FROM emp ORDER BY [colum1], [column2], ...[ASC/DESC]; 'ASC(오름차순:default), DESC(내림차순)
null(표현되어 있지 않은 컬럼, space를 의미하는 것이 아니라 null로 명시적으로 표현, 가장 큰 값으로 표현됨), not null
DDL(Data Definition Language)
alter table emp
rename column A to B '컬럼명을 테이블 스키마에서 바꾸는 것. cf) Alias는 임시로 바꿈
<가공컬럼>
:실제 테이블에는 존재하지 않는데 사용자의 필요에 의해서 컬럼을 산술식(우선순위 주의)을 표현해서 만들어내는 가짜 컬럼.
ex) SELECT empno, sal, comm, sal + comm FROM emp;
<컬럼 data-유형(type)>
┌char ┐
└varchar ┘ : 문자형
number : 숫자형
date : 날짜형
type에 따라 연산자 사용 방식이 다르다. 문자형, 날짜타입에는 single 인용부호 사용.
날짜 타입은 Format 포맷이 맞아야 된다
날짜 포맷 확인 쿼리
1 select value
2 from NLS_SESSION_PARAMETERS
3 where parameter = 'NLS_DATE_FORMAT';
RR 타입 -> 00 ~ 50 : 2000년대로 인식, 51 ~ 99 : 1900년대로 인식
YY 타입 -> 00 ~ 50 : 1900년대로 인식
SELECT TO_CHAR(sysdate, 'DY') FROM DUAL;
오늘날짜 확인
select sysdate from dual;
날짜포맷 변경
alter session set NLS_DATE_FORMAT = 'YYYY/MM/DD';
※세션레벨(이 sql 프로세스)에서만 적용 cf)서버(인스턴스)레벨 -> 관리자로 들어가서 모든 프로세스에 적용하도록 변경 가능
C:\oraclexe\app\oracle\product\10.2.0\server\sqlplus\admin\glogin.sql 제일 하단부에 alter session set
NLS_DATE_FORMAT = 'YYYY/MM/DD'; 추가하면 매번 접속시 마다 세션을 변경 시킨다
IN 연산자
WHERE depno IN(10, 20, 30)
-> WHERE depno = 10 or depno = 20 or depno = 30
-> WHERE depno = 10
UNION
WHERE depno = 20
UNION
WHERE depno = 30
LIKE 연산자
where ename like '주%' -> '%' 와일드카드문자
where ename like '주_' -> '_' 임의의 한 문자
인용부호 안에 있는 문자열 중에 ESCAPE 문자 뒤에 오는 문자는 문자로 취급한다. 임의의 한 문자를 가르키는 '_'와 구분
BETWEEN 연산자
where deptno BETWEEN 10 AND 20;
-> where deptno >= 20 and deptno <= 30;
※ IN과 BETWEEN 지양할 것 -> 어차피 번역되어서 실행되므로 효과가 덜하다
문자열 결합
ename || '의 1년 연봉은' ||sal||'입니다'
-> ename의 1년 연봉은 sal 입니다
PL-SQL의 DBMS_SMTP, DBMS_MAIL을 이용해서 E-mail을 보낼 수 있다.
이때 문자열 결합을 이용하게 된다.
UNION 연산자
: 중복된 정보는 한번만 보여줌
SQL 표준화 방법
①SQL문법은 대문자
②각절은 라인의 처음부터 작성
ex)SELECT no, name
FROM emp
WHERE deptno = 10
ORDER BY no;
<download>
1. spool 명령어 -> 로그내용 남길때도 이용
2. util_file 패키지
(PL-SQL)
3. APP-S/W
<upload>
1. sql*load_utility (In Fundamental I)
2. external_table
3. util_file 패키지
4. APP-S/W
<함수=function=>sub_routine, sub_program>
*시간 가져오는 것
SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP는 SQL과 같이 사용되어진다.
FROM 뒤에는 반드시 테이블명을 써야 하는데, 실제 테이블명 사용할 수 없으므로 껍데기(더미테이블)를 제공한 것