PL/SQL Day2
PL-SQL Day 2
<변환함수>
*용도1. 값변환
WHERE hiredate = '81-02-03'
hiredate는 DATE 타입이고 '81-02-03'은 char 타입이다. 서버에서 내부적으로 변환하는 작업이 일어난다
to_date('81-02-03') -> char 타입을 date타입으로 변환
*용도2. 포맷변환(ex. 날짜시간출력)
SYSDATE "년/원/일"
SYSTIMESTMP "년/원/일 시:분:초.밀리세컨드 +GMT" - 9i부터제공
ex.)SELECT TO_CHAR(SYSDATE, 'YY-MM-DD HH:MM') FROM DUAL;
** 날짜 format 변경 방법
① Statement-Level : TO_CHAR() 함수를 이용해서 문장에서 바로 바꾼다
② Session-Level
③ Instance(Server, 데이터베이스 전체)-Level
<숫자형식요소>
99,999 -> _1,234 : 해당 되는 자릿수에 값이 없으면 표시안함
00,000 -> 01,234 : 해당 되는 자릿수에 값이 없으면 0으로 채운다
ex)TO_CHAR(12506, '$9099,999')
<복수 행 함수>
복수 행 함수 사용시 사용하는 문법
GROUP BY
HAVING
<가상컬럼>
: 서버에 의해서 제공되는 칼럼
Level - 조직도를 만들어준다, 사용예:
Rowid
Rownum
<JOIN>
:WHERE절에 공통으로 적용되는 기준이 필요함
- 8i
ORACLE에 국한된 문법 기반,
CRTESIAN-JOIN(WHERE절 생략),
EQUI-JOIN[INNER-JOIN, EQUI->EQUAL](WHERE 절에서 결합 기준에 따라 결합),
SelfReference-JOIN(자기가 자기를 참조하는 데이터 모델. 즉,같은 필드명을 두번이상 못 쓰는것에 대한 솔루션)
OUTER-JOIN
- 9i
ANSI 표준 문법 기반,
CROSS-JOIN,
NATUAL-JOIN,
SelfReference-JOIN
Left-OUTER-JOIN
Right-OUTER-JOIN
Full-OUTER-JOIN
<서브쿼리>
:내가 검색하고자 하는 값을 모를때
*SQL언어
DQL: SELECT
DML: INSERT, UPDATE, DELETE
TCL: COMMIT, ROLLBACK, SAVEPOINT
DDL(Data Definition Language): CREATE, Auto Commit, 이전에 Commit, Rollback 되지 않은 DML을 Commit 시킨다
DCL:
<LOCK>
A
UPDATE emp
SET ~~
WHERE id = 10;
B
UPDATE emp
SET ~~
WHERE id = 10;
LOCK현상 : A가 진행중일 떄 B를 실행하면, A에게 우선권을 부여하여 B는 waiting함으로써 데이터를 공유한다.
①Row-Level Lock :
UPDATE, INSERT, DELETE Statement가 WHERE절이 있는 경우 조건을 만족하는 경우에만 Lock이 걸린다
SELECT * FOR UPDATE -> 조회지만 Lock이 발생. UPDATE 예정을 표시(ex. 좌석예매)
②Table-Level Lock :
i)UPDATE, INSERT, DELETE Statement에서 WHERE절이 없는 경우
ii)LOCK TABLE EMP IN EXCLUSIVE MODE; (ex. 인사급여관리)