* 산술함수
abs(n) : n의 절대값
ceil(n) : n보다 크거나 같은 최소정수
cos(n) : n의 cosine 값
cosh(n) : n의 hyperbolic cosine 값
exp : e의 n지수승
floor(n) : n보다 작거나 같은 최대정수
mod(m,n) : m을 n으로 나눈 나머지
power(m,n) : m의 n지수승
sign(n) : n<0이면 -1 / n=0이면 0 / n>0이면 1
sin(n) : n의 sine값
sqrt(n) : n의 루트근 / n<0이면 null
tan(n) : n의 tangent
greatest(a,b,c..) : 그중 가장 큰 값
least(a,b,c...) : 그중 가장 작은 값
round(n,2) : n을 소숫점 2자리에서 사사오입한 값
to_number : 숫자를 포함하는 char값을 number로 변환
trunc : 소숫점이하 ~ 자리에서 잘사한 값
* 문자열함수
decode(GRADE, 'A', 4, 'B', 3, 0) : GRADE필드값이 'A'이면 4, 'B'이면 3, 아니면 0
initcap : 단어의 첫문자를 대문자로
instr(LOC, '') : LOC에서 처음으로 나타나는 공백의 위치를 리턴
length : 길이를 리턴
lower : 소문자로 변환
upper : 소문자를 대문자로 변환
substr(GRADE, 1, 2) : GRADE필드값의 처음 2문자 리턴
dump : oracle 내부 저장형식
user : 현재 oracle 에 접속한 사용자명
replace(char1, str1, str2) : char1에서 str1을 str2로 변환
* 날짜포맷
YYYY또는 SYYY : 년의표시. S를 지정하면 기원전에 -붙는다
YYY, YY, Y : 년의 아래 3자리, 2자리, 1자리
SYEAR or YEAR : 년을 절차로 표시. S를 지정하면 기원전에 -
Q : 년의 1/4
MM : 월
MONTH or MON : 월의 명칭 또는 3문자의 단축형
DDD, DD, D : 년,월,주의 몇번째 날인가 표시
DAY, DY : 요일 또는 3문자의 단축형
AM, PM : 오전(AM)과 오후(PM)의 표시
HH 또는 HH12 : 시각(1~12)
HH24 : 시각(0~23)
MI : 분
SS : 초
* 날짜함수
add_months(D, N) : 날짜 D에 N개월을 가산한다
greatest(D1, D2) : D1과 D2에서 늦은쪽의 날짜
least(D1, D2) : D1과 D2에서 빠른쪽의 날짜
last_day(HIREDATE) : HIREDATE가 포함되어 있는 월의 마지막 일
month_between(A, B) : B부터 A까지의 월 수
next_day(hdate, 'FRIDAY') : hdate후의 첫 금요일
round(hdate) : hdate를 일을 단위로 하여 사사오입
to_char(FDATE, 'YYYY-MM-DD') : FDATE날짜의 값을 우측 포맷형식으로 문자열변환
to_date(FDATE, 'YYYY-MM-DD') : 우측 포맷형식으로 된 문자열을 날짜타입으로 변환
* 존재를 테스트하는 서브쿼리 : EXISTS
- 서브쿼리가 적어도 1행이상 리턴시 참. 아니면 거짓
* 합집합, 교집합, 차집합
UNION : 합집함. 동일한 행 리턴시 한건으로 표시
UNION ALL : 중복된 값도 모두 표시
INTERSECT : 교집합. 양쪽 쿼리 모두에서 리턴된 행 표시
MINUS : 차집합. 앞의 쿼리에서는 리턴되지만 뒤의 쿼리에서는 리턴되지 않는 행을 리턴
oracle 시/분/초 더하기.. (0) | 2016.11.11 |
---|---|
특정 필드가 포함된 테이블 . PK필드 조회하기 (0) | 2013.04.09 |
Table 생성 & 수정 (0) | 2009.10.08 |
Sequence (0) | 2009.10.08 |
《Table 생성》
SQL> create table tableName(테이블명) (
2 FieldName DataType(Size)
3 );
《Table 수정》
1.test table에 osy란 number(10)타입의 컬럼 추가
SQL> alter table test add(osy number(10));
2.test table에 osy컬럼명을 osy79로 컬럼명 변경
SQL> alter table test rename column osy to osy79;
3.test table에 osy79로 컬럼 데이터 타입 변경
SQL> alter table test modify(osy79 varchar(10));
4.test table에 osy79로 컬럼 삭제
SQL> alter table test drop(osy79);
oracle 시/분/초 더하기.. (0) | 2016.11.11 |
---|---|
특정 필드가 포함된 테이블 . PK필드 조회하기 (0) | 2013.04.09 |
Oracle 각종 함수 (0) | 2010.12.23 |
Sequence (0) | 2009.10.08 |
《Sequence 정의》
1. 유일한(UNIQUE)한 값을 생성해주는 오라클 객체이다.
2. 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.
보통 Primary Key 값을 생성하기 위해 사용한다.
3. 메모리에 Cache 되었을때 Sequence값의 액세스 효율이 증가한다.
4. 테이블과는 독립적으로 저장되고 생성된다.
따라서 하나의 Sequence를 여러 테이블에서 쓸수 있다.
5. INSERT시 NEXTVAL 구문자체가 시퀀스의 현재값(CURRVAL)을 정의된 증가치(INCREMENT BY)
만큼 증가시키고 결과를 리턴해 준다.
《Sequence 생성》
SQL> CREATE SEQUENCE seq_test(시퀀스명);
☞ Sequence 지정 옵션
START WITH 1 -- 시작값(변경불가능)
INCREMENT BY 1 -- 1씩 증가
MAXVALUE 1000 -- seq의 최대값
MINVALUE 1 -- 최소값(다시 시작할때 시작되는 값)
CACHE 20 -- 캐쉬메모리(최대 20개)
ORDER -- 정렬
CYCLE -- Recycle(최대값이 지나면 다시 시작해서 사용)
《지정옵션》
START WITH : 시퀀스의 시작값을 지정한다. 지정한 값부터 순차적으로 시퀀스번호가 증가
한다. 시퀀스 옵션은 대부분 변경할 수 있지만 START WITH로 지정한
초기값은 바꿀수 없다.
INCREMENT BY : 시퀀스를 얼마씩 증가시킬 것인가를 지정한다. 만약 음수로 설정하면
시퀀스 값은 계속해서 감소하게 된다.
MAXVALUE : 시퀀스의 최대값
NOMAXVALUE는 최대값을 무한대로 지정한다.
MINVALUE : 시퀀스의 최소값
기본값은 1
NOMINVALUE를 지정할 경우 최소값은 무한대가 된다.
CACHE : 시퀀스를 빨리 제공하기 위해 미리 메모리에 Cache개 만큼의 시퀀스를 만들어 준비
해 두고 있다. 메모리에 Cache 되었을 때 시퀀스 값의 액세스 효율이 증가한다.
(디폴트는 20개)
오라클에서는 Cache개 만큼의 시퀀스를 미리 메모리에 보관하고 있기 때문에 만약
시스템이 비정상적으로 종료된다면 그 내용이 모두 사라지게 된다.
따라서 나중에 시퀀스를 새롭게 사용할 때는 Cache에 들어있던 내용 다음부터 시작
하게 된다.
ORDER : 시퀀스는 주로 키 값을 만들어 내기 위한 목적으로 사용되기 때문에 실제의 값 보다
는 유일성이 가장 중요시된다. 오라클 병렬 서버를 병렬모드로 사용하는 경우 짧은
시간에 여러 사용자가 시퀀스를 사용하면 요청 순서에 따라 시퀀스 값이 할당되지
않을 수도 있다. 만약 요청 순서에 따라서 정확하게 시퀀스 값을 제공하고 싶다면
ORDER 옵션을 지정해야 한다.
(디폴트는 NOORDER)
병렬 서버가 아닌 경우에는 옵션과 관계없이 요청 순서에 따라 시퀀스가 정확하게
할당된다.
CYCLE : 시퀀스를 사용하다가 MAXVALUE에 도달하면 다시 MINVALUE부터 시작하라는
옵션.(디폴트는 NOCYCLE)
《사용자 Sequence 조회》
SQL> SELECT * FROM USER_SEQUENCES ;
《현재값 확인》
SQL> SELECT seq_test.CURRVAL FROM DUAL;
※ 처음부터 CURRVAL 확인할 경우 오라클 에러 생김.
ORA-08002: sequence SQ_WWN.CURRVAL is not yet defined in this session
CURRVAL은 NEXTVAL 사용후에야 같은 세션에서 사용이 가능하다.
그냥 단지..마지막 시퀀스를 조회하고 싶을때는
SQL> SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'seq_test';
-> LAST_NUMBER(마지막 시퀀스)값 확인
《다음 Sequence 확인》
SQL> SELECT seq_test.NEXTVAL FROM DUAL;
시퀀스 증가는 seq_test.NEXTVAL
(NEXTVAL은 전의 값으로 되돌릴 수 없다.)
CURRVAL, NEXTVAL 사용할 수 있는 경우
-. SubQuery가 아닌 SELECT문
-. INSERT문의 SELECT절
-. INSERT문의 VALUE절
-. UPDATE문의 SET절
《Sequence 변경》
SQL> ALTER SEQUENCE seq_TEST INCREMENT BY 3 NOCACHE;
시퀀스 변경시 START WITH 값은 변경 불가능(변경할려면 지우고 다시 생성)
《Sequence 삭제》
SQL> DROP SEQUENCE seq_test;
[출처] 시퀀스(Sequence)|작성자 순둥이
oracle 시/분/초 더하기.. (0) | 2016.11.11 |
---|---|
특정 필드가 포함된 테이블 . PK필드 조회하기 (0) | 2013.04.09 |
Oracle 각종 함수 (0) | 2010.12.23 |
Table 생성 & 수정 (0) | 2009.10.08 |