- trunc
  소수점 이하 특정수치까지 표현할때 사용할수 있다. 소수있는 데이터를 소수없이 정수로만 표현할때도 사용한다.

 

  trunc(임의의데이터, [x])
  X = 소수점을 표현할 자릴수를 의미.
      0은 정수만 표현하며, 이는 X를 기입하지 않는 경우 trunc는 자동으로 0으로 인식한다.
      -1은 10의 자리까지만 보여주고 이하는 버리라는 의미. -2는 100의 자리까지 보여주라는 것.

 


- mod
  특정데이터를 나누었을때 남는 나머지값을 보여줌.

 

  mod(임의의데이터, [X])
  X = 임의의데이터를 나눌 값을 입력.
    2를 입력하면 임의의데이터를 2로 나눈후 나머지 값을 출력하고.
    5를 입력하면 임의의데이터를 5로 나눈후 나머지 값을 출력.

※ 시간에서 시간을 빼면 그 결과값은 일수로 출력된다.

 

- months_between
  입력된 두 날짜를 기준으로 몇개월차이나는지 확인.

 

 

  months_between([X], [Y])
  X, Y = 입력될 데이터는 날짜형식에 맞추어(ex: 2001-01-01) 입력하면 별도로 타입변형을 하지 않아도 됨.

 

- last_day
  해당 날짜가 속한 달의 매월 마지막날이 몇일인지 출력

 

 

 

- next_day
  지정된 돌아올 요일이 해당하는 날짜

 

 

  next_day(sysdate, '일')
  next_dat('2012-09-07', '월') -- 2012-09-07을 기준으로 월요일이 돌아올 날짜 -- 출력값은 12/09/10

 

 

 

 

 

 


복습 및 응용.

1. 1년 2개월 3일 4시간 5분 6초를 초로 환산하기.

2. 환산된 초를 년월일시간분초 형태로 나타내기

3. 경매번호, 경매물건, 경매종료시각으로 구성된 테이블에서
   현재로부터 남은기간은 얼마인지 나타내기

4. 26개월을 복무기간으로 입대한다. 제대까지 먹어야할 끼니는 몇번 먹을까.

5. 사용자 khman1에서 만든 jikwon 테이블을 기준으로 아래와 같이 나타내기.
   단, 정년퇴직일자는 해당사원의 나이(한국나이)로 60세가 되는 년도의 입사일자로 한다.
   ----------------------------------------------------
    사원명      현재나이     입사일자     정년퇴직일자
   ----------------------------------------------------


WRITTEN BY
빨강꼬마

,

- sysdate
  현재 시스템 시각을 보여줌. (=current_date)

- to_char
  숫자 및 날짜 타입을 문자로 변환시켜주는 함수.
 

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')
from dual;

 

 - to_char(sysdate, '[X]') *목요일인경우
          X = day   : 목요일 로 출력
          X = dy    : 목   으로 출력
          X = d     : 5      로 출력(1~7까지로 일~토 별로 대입. 예로 3인경우 화요일)
          X = ddd   : 현재 년도의 1월 1일로 가서 오늘의 날짜까지 총 몇일째인지 출력
          X = dd    : 현재의 월의 1일로 이동해서 현재의 날짜까지 총 몇일째인지 출력. 즉, 현재의 일자.
          X = sssss : 현재 일자가 시작된 0시0분0초부터 현재까지 총 몇초째인지 초단위로 출력.
          X = year  : 년도만 (=yyyy와 동일)
          X = month : 월만   (=mm과 동일)
          X = hh    : 시간
          X = mi    : 분
          X = ss    : 초
          X = q     : 올해 4분기중 현재 속하는 분기를 출력.

※ hh24에서 24시간제로 표시하는 것을 am 혹은 pm으로 변경할 수 있음
※ 날짜는 -으로 구분, 시간은 :으로 구분.

 

 - to_char(123.456, 9999.99)
          123.456을 정수4자리 와 소수점이하2자리로 표현하라 라는 의미.
          9999.99앞에 통화기호를 쓰면 결과에 포함되며, 통화기호를 L로 기재하면 운영체제등을 기반으로 소속국가의 통화량으로 표기.
         

- extract
  날짜 데이터에서 날짜를 숫자타입으로 뽑을때 사용.
  * extract(year from sysdate)
  * extract(month from sysdate)
  * extract(day from sysdate)

 

select extract(year from sysdate), extract(month from sysdate), extract(day from sysdate)
from dual;

 

- to_number
  문자타입을 숫자로 변환시켜주는 함수.

 

select '000001', to_number('00001')
from dual;

 


- to_date
  문자타입을 날짜타입으로 변환시켜주는 함수.

 

select sysdate + 1, sysdate - 1
from dual;

※ 날짜데이터에 +1 이나 -1을 입력하면 하루로 계산되어 결과데이터(날짜)가 출력됨
※ 현재날짜는 sysdate로 처리하면 날짜타입이므로 +나 -로 처리가능하나,
   임의날짜를 입력하면 문자형태로 입력되기 때문에 to_date로 처리하여 날짜타입으로 변경하여 처리해야함.

 

- add_months(임의의날짜, [X])
  임의의 날짜로 부터 X개월 만큼 추가

 

select add_months(sysdate, 1), sysdate, add_months(sysdate, -1)
from dual;

 

  ex: 현재로 부터 1년 2개월 3일 4시간 5분 6초 뒤를 출력

select to_char(sysdate, 'yyyy-mm-dd hh24:mm:ss'),
       to_char(add_months(sysdate, 12*1+2) + 3 + 4/24 + 5/(24*60) + 6/(24*60*60), 'yyyy-mm-dd hh24:mm:ss')
from dual;


 

- to_yminterval('yy-m') / to_dsinterval('ddd hh:dd:ss')
  오라클9g 부터 지원되는 명령어
  add_months(sysdate, 12*1+2) 와 sysdate + to_yminterval('01-02') 는 동일.

 

 

 

 

 

 

 

문제1. case문을 사용하여 to_char(sysdate, 'd')를 이용, 현재 요일을 숫자가 아닌 요일명으로 출력하게 하는 쿼리문을 작성하라.

 

문제2. 아래의 그림처럼 처리하는 쿼리문을 작성하라.

 

 

 

 

 

 

 

답.1.

select case to_char(sysdate, 'd')
            when '1' then '일요일'
            when '2' then '월요일'
            when '3' then '화요일'
            when '4' then '수요일'
            when '5' then '목요일'
            when '6' then '금요일'
            when '7' then '토요일'
            else '없음' end as "오늘의 요일명"
from dual;

 

답.2 (이외 쿼리문도 결과만 같으면 됨)

select saname as "사원명",
            extract(year from sysdate) - ( substr(jubun, 1, 2) + case when substr(jubun, 7, 1) in ('1', '2') then 1900 else 2000 end) + 1 as "현재나이",
            case when substr(jubun, 7, 1) in ('1', '3') then '남' else '여' end as "성별"
from jikwon;


WRITTEN BY
빨강꼬마

,

- reverse: 해당 문자열을 거꾸로 보여주는 함수

 

select
'oracle', reverse('oracle'),
'KH정보교육원', reverse('KH정보교육원'),
reverse( reverse('KH정보교육원'))
from dual; 



 

- length: 해당 문자열의 글자수를 알려주는 함수

 

select
'KH정보교육원', length('KH정보교육원')
from dual; 

 


- lengthb: 해당 문자열의 byte수를 알려주는 함수

 

select
'KH정보교육원', lengthb('KH정보교육원')
from dual;

 


- instr: 어떤 문자열에서 특정한 글자(단어)가 몇번째 위치에 있는지를 알려주는 함수

 

select
'oracle dba database baseball',
instr('oracle dba database baseball', 'ba', 1, 1), -- x y -- x는 출발지점. y번으로 ba가 나오는 위치 (공백포함)
instr('oracle dba database baseball', 'ba', 1, 2), -- 1번째부터 출발하고 2번째로 나오는 ba위치(공백포함)
instr('oracle dba database baseball', 'ba', 1, 3),
instr('oracle dba database baseball', 'ba', 1, 4),
instr('oracle dba database baseball', 'ba', 1, 5), -- 5번째는 없으므로 결과값 0이 나옴
instr('oracle dba database baseball', 'ba', 10, 1), -- 10번째부터 출발해서 결과가 16
instr('oracle dba database baseball', 'ba', 1), -- y값 ,1 이 생략된것
instr('oracle dba database baseball', 'ba', 10) -- y값 ,1 이 생략된것
from dual;

 


- ltrim:  어떤 문자열에서 왼쪽에서 부터 특정글자를 제거시켜주는 함수
  - 왼쪽부터 지우다가 공백 혹은 지정하지 않은 다른 문자를 만나면 정지하고 거기까지 출력
  - 별도의 값을 지정하지 않은 경우 공백을 삭제

 

select
'aabbccccddd bdbdacoabcadcbabdbcba',
ltrim('aabbccccddd bdbdacoabcadcbabdbcba', 'abcd'),
'aabbccccdddbdbdacoabcadcbabdbcba',
ltrim('aabbccccdddbdbdacoabcadcbabdbcba', 'abcd')
from dual;

 

select
'이' || '                            순신' ,
'이' || ltrim('                            순신') -- ltrim에서 별도의 값을 안쓸경우 공백을 삭제
from dual;

 


- rtrim: 어떤 문자열에서 오른쪽에서 부터 특정글자를 제거시켜주는 함수

 

- decode
  decode(a, b, c, d, e, f): A가 B면 C를 출력하고, A가 D면 E를 출력하고, B나 C가 아닌경우 F를 출력하게함

select decode(5-2, 1, '5-2 = 1입니다.', 3, '5-2 = 3입니다.', '나는 산수를 몰라요')
from dual;

 

 

- case when then else end (암기)
ⓐ 기준 데이터가 등호 (=)(ex:5-2 와 같이 3이라는 데이터가 명확) 일 경우

case [A] when [B] then [C] else [D] end: A가 B면 C를 출력하게 하고 그외 값일 경우 D를 출력하게 함.
                                         다만, when ~ then ~ 절은 when ~~ then ~~ 다음 추가로 사용할 수 있음.

 

ⓑ 기준 데이터가 크거나 작은 범위형 데이터(ex: 5보다 크다 혹은 5보다 작다)일 경우

 

(*): >(크다), <(작다), =(같다)등의 특정 부등호를 의미
case when [A (*) B] then [C] else [D] end: A가 B보다 (*)일때 C를 출력하게 하고, 그외 값일 경우 D를 출력하게 함.
                                           다만, when ~ then ~ 절은 when ~~ then ~~ 다음 추가로 사용할 수 있음. 

 

 

 

1. 아래의 테이블을 해당 결과 데이터로 변경하는 쿼리문을 작성하라

 



2. 아래의 테이블을 해당 결과 데이터로 변경하는 쿼리문을 작성하라

 

 

 

 


WRITTEN BY
빨강꼬마

,

◆ Null에 대한 처리 ◆

1. Null과 관련된 함수
   ㄱ. nvl 함수
     형식: select nvl(x, y)
        X값이 null일 경우 Y로 출력하고, null이 아닐 경우 X값 대로 출력하게함.


select nvl(null, -800), nvl(0, -800), nvl('이순신', '장군'), nvl(null, '장군') from dual;

 


select employee_id as "사원번호", first_name as "성", last_name as 명, salary 기본급, commission_pct as "수당 퍼센트1",
          nvl(commission_pct, 0) as "수당 퍼센트2",
          nvl(salary * commission_pct, 0) as "수당",
          (salary + nvl(salary * commission_pct, 0)) * 12 as "연봉"
from employees;

※ select에서 기입되는 컬럼명의 최종 출력 컬럼명을 별명처리로 위의 그림(예제2)처럼 바꿀수 있다.(as는 생략가능)
※ 다만 별명안에 공백이 있을 경우 "" 가 반드시 있어야 함
   권장 ex: select employee_id as "사원번호"
      ex: select employee_id "사원번호"
      ex: select employee_id 사원번호

 


   ㄴ. nvl2 함수
     형식: select nvl2(x, y, z)
        X값이 Null이면 Y값 출력, X값이 Null이 아니면 Z값 출력 

select nvl2(0, 100, 200), nvl2(null, 100, 200), nvl2('일', '이', '삼'), nvl2(null, '이', '삼') from dual;

 


   ㄷ. coalesce 함수
     형식: select coalesce(A, B, C, D)
        A가 Null이 아닐경우 A 출력,
        A가 Null일 경우, B 출력,
        B가 Null일 경우, C 출력,
        C가 Null일 경우, D 출력,
        D가 Null일 경우, Null 출력

 

select coalesce(0, 1, 2, 3),
          coalesce(null, 1, 2, 3),
          coalesce(null, null, 2, 3),
          coalesce(null, null, null, 3),
          coalesce(null, null, null, null)
from dual;

 

 

- where 절에서 null로 데이터를 구할때 = 연산자 대신 is 혹은 is not 으로 사용
  (null 이 존재하지 않는 데이터이기 때문에 = 연산자는 처리가 되지 않아 실행 불가)

 

select employee_id as "사원번호", first_name ||' ' ||last_name as "성명", salary as "급여", commission_pct as "커미션 퍼센트"
from employees
where commission_pct is null;   

 

 

select employee_id as "사원번호", first_name ||' ' ||last_name as "성명", salary as "급여", commission_pct as "커미션 퍼센트"
from employees
where commission_pct is not null;

 


- || (백스페이스키 왼편에 붙은 키를 쉬프트키를 누른상태에서 입력)
 결과물에서 여러개의 다른 컬럼을 한개의 컬럼으로 합하여 표시하고자 할때 사용.
 ||의 경우 2개 이상이 가능하므로 이것을 주로 사용.

 

 


select first_name ||' '||  last_name as "성명" from employees;

 


- concat: ||와는 다르게 2개의 컬럼까지만 가능

select concat('이순신의 입사일자는 ', sysdate) from dual;

 

 

select concat('이순신의 입사일자는 ', sysdate, ' 이고,') from dual;

 


- distinct: 결과물중 행 데이터가 동일할 경우 한개만 출력하는 명령

 

select distinct job_id, department_id from employees;

 

- 데이터 타입중 문자 및 날짜 타입은는 좌(왼)측 정렬

- 데이터 타입중 숫자 타입은 우(오른)측 정렬

 

 

◆ like 연산자 ◆

- like는 = 연산자와 비슷한 기능을 가짐.

select * from employees where job_id = 'AD_VP';

 

select * from employees where job_id like 'AD_VP';

 

- like연산자는 = 연산자와는 다르게 Wild Character 인 %, _를 사용하여 보다 구체적인 조건을 사용할 수 있다.
   - %: 글자가 있고 없고 관계없이 모든 글자를 뜻함

select job_id from employees where job_id like 'AD%';

 

    - _: 글자가 무엇이든 상관없이 1글자를 뜻함

select distinct job_id from employees where job_id like '___C%';

 


- escape: like 연산자를 사용할때 데이터내 % 문자가 와일드캐릭터로 인식되어 정확한 데이터 추출이 불가능할때 한글자 단위로 사용함
     (escape 사용할때 탈출 문자는 아무거나 가능하나 보통 \를 사용함)

 

 

select * from tbl_watch where bigo like '%99.99\%%' escape '\';

WRITTEN BY
빨강꼬마

,

이하 내용중
 1. Select 문의 처리 순서
 2. 연산자 우선 처리 순위
는 매우 중요함.


- 반드시 select는 아래의 처리 순서로 기억하여 코딩하는 것이 매우 중요
 - SELECT 문의 처리순서

 ⑤ SELECT [컬럼명]
  - 조회하려는 테이블내 행에서 조회할 컬럼명
 ① FROM [테이블명]
  - 조회하려는 대상 테이블의 이름
 ② WHERE [조건절]
  - 조회하려는 조건에 맞는 특정한 행만 추출해서 메모리에 올리는 것
 ③ GROUP BY 절
 ④ HAVING [그룹함수조건절]
 ⑥ ORDER BY 절

※ 위 순서를 기억하여 from절 부터 코딩하는 습관을 기르도록 하자.

 

- 특정 계정내 테이블과 뷰를 확인하는 명령어
  (특정 계정은 system등과 같이 로그인하는 계정을 의미하며, 해당 계정으로 로그인 한 상태에서 아래 명령어를 입력)

 


select * from tab;

 

- where 구문의 조건절 및 연산자
 - or / in / and 조건절
  - or: 이거 아니면 이거
  - in: in(x,y)  / not 이 붙을때는 컬럼명 앞이 아닌 not in 으로 쓸수 있음
  - and: 이거와 이거를 함께 만족하는 조건
  - >= 크거나 같음
  - <= 작거나 같음
  - != 같지 않음
  - ^= 같지 않음 ->mssql에서는 안먹힘
  - <> 같지 않음
  - where not 컬럼명 = 같지 않음

 - or and not 괄호 연산자가 혼합된 경우, 먼저 실행되는 우선 순위
  - 1. 괄호
  - 2. not
  - 3. and
  - 4. or

 - and 연산자만 있는 처리문인 경우 타이핑된 순서로 처리됨

 - in/not in 같은 경우 오라클 내부에서 or 연산자로 풀이해서 처리하는 순서를 가지고 있기 때문에
   풀이해서 코딩할 경우 내부처리 속도가 조금더 빨라질 수 있음.

 - 괄호는 연산자 처리에 대한 작업자의 코딩을 수월하게 함.


WRITTEN BY
빨강꼬마

,


하루 식비 2만원이다.
현재부터 올해마지막까지 몇일 몇분 몇초가 남았고, 소비되는 식비의 총합은 얼마인지 출력하라

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.


정답.

select trunc((trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60)/60)/60/24) || '일 ' ||
            trunc(mod((trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60)/60)/60, 24)) || '시간 ' ||
            trunc(mod(trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60)/60, 60)) || '분 ' ||
            trunc(mod(trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60), 60)) || '초' as "남은 시간",
            trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate)) * 2 || ' 만원' as "식비"
from dual;

쿼리문장을 좀 더 줄일수 있었는데 다 하고나서 복잡해져서 포기 ㅋㅋㅋ



WRITTEN BY
빨강꼬마

,

- 데이터 타입의 종류
 - 숫자타입: number (정수 및 실수 모두 포함)
          표현범위: number(5) -> -99999 ~ 99999
                    number(3) -> -999 ~ 999
                    number(5,2) -> -999.99 ~ 999.99
                    number(6,3) -> -999.999 ~ 999.999


 - 문자타입
   ①char: 고정형 문자타입
     name char(10) -> name 컬럼에 입력되는 데이터의 크기는 무조건 10Byte로 들어온다. 단, 10Byte가 넘는 데이터는 입력이 불가함.
                          -> 한글의 경우 한글자당 2Byte 영문은 1Byte. (키보드에서 한키로 입력되는 숫자, 영어등은 1Byte. 없는 것은 2Byte)

            ex: '이순신'             -> 10바이트로 고정되서 들어옴
                '김구'               -> 10바이트로 고정되서 들어옴
                '이에리사'           -> 10바이트로 고정되서 들어옴
                '박차고나온애가이뻐' -> 18바이트이므로 입력불가


   ②varchar2: 가변형 문자타입
     name char(10) -> name 컬럼에 입력되는 데이터의 크기는 해당 데이터의 크기만큼 들어온다. 단, 10Byte가 넘는 데이터는 입력이 불가함.

            ex: '이순신'             -> 6바이트로 맞추어 들어옴
                '김구'               -> 4바이트로 맞추어 들어옴
                '이에리사'           -> 8바이트로 맞추어 들어옴
                '박차고나온애가이뻐' -> 18바이트이므로 입력불가

   ③Nchar , Nvarchar2: 크기의 단위가 Byte가 아니라 글자수를 나타냄
            name Nchar(10) -> name 컬럼에 입력되는 데이터의 크기가 유니코드등을 포함하여 글자수 최대 10글자까지 입력됨. 넘으면 당연히 입력 불가

            ex: '이순신'             -> 10개의 글자수로 고정되어 들어옴. -> 20Byte
                '김구'               -> 10개의 글자수로 고정되어 들어옴. -> 20Byte
                '박차고나온애가이뻐' -> 10개의 글자수로 고정되어 들어옴. -> 20Byte
                'John michael'       -> 12개의 글자수(공백포함)이므로 입력불가.
                           
            name Nvarchar2(10) -> name 컬럼에 입력되는 데이터의 크기가 유니코드등을 포함하여 글자수 최대 10글자까지 입력됨. 
                                              넘으면 당연히 입력 불가

            ex: '이순신'             -> 3개의 글자수로 들어옴. -> 6Byte
                '김구'               -> 2개의 글자수로 들어옴. -> 4Byte
                '박차고나온애가이뻐' -> 9개의 글자수로 들어옴. -> 18Byte
                'John michael'       -> 12개의 글자수(공백포함)이므로 입력불가.


 - 날짜타입: date
          date예문:
    select sysdate, current_date from dual;
    select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),
    to_char(current_date, 'yyyy-mm-dd hh24:mi:ss')  from dual;

※ 컬럼명에 숫자가 들어온다 하더라도 가장 앞에 숫자 0이 들어올 수 있는 개연성이 있을 경우 number 형이 아닌 문자형으로 지정하여야 한다
※ 문자는 시작과 끝에 반드시 '을 사용해야 함. 사용하지 않을 경우 숫자로 인식함.


- table에 대한 comment 처리문
comment on table [table명] is '[주석내용]';

- table내 각 column에 대한 comment 처리문
comment on column [table명].[table내 주석처리할 column명] is '[주석내용]';


- 특정 테이블에 있는 각 컬럼에 대한 주석확인 처리문

select column_name, comments
from user_col_comments
where table_name = '[table명]';



- 특정 테이블의 컬럼명과 데이터 타입 조회 명령어

describe [table명];
혹은
desc [table명];



- 특정 테이블 데이터 조회
select * from [table명];



- 데이터 입력하기
insert into [table명] values([column1 데이터], [column2 데이터], ~~~~~~~, [마지막 column 데이터]);




※ insert 명령어로 입력한 데이터는 디스크에 기록되는 것이 아닌 메모리에 기록하는 것. commit으로 디스크에 기록함



- 데이터 변경하기
update [table명] set [변경할 컬럼명1] = [변경할 데이터], [변경할 컬럼명2] = [변경할 컬럼명2] + [변경할 데이터] where [변경대상인 컬럼행] = [변경대상의 컬럼 데이터];



※ where 구문이 없을 경우 모든 행의 해당 컬럼이 변경됨
※ 변경 데이터중, X = X + 200 으로 예를 들면 X컬럼에 있는 값과 200을 합산한 결과 데이터를 최종데이터로 치환한다는 의미임
※ update 명령어로 변경한 데이터는 디스크에 기록되는 것이 아닌 메모리에 기록하는 것. commit으로 디스크에 기록함



- 데이터 삭제하기
delete [table명] where [삭제할 컬럼행] = [삭제할 컬럼행에 있는 열 데이터];




※ delete 명령어로 삭제한 데이터는 디스크에서 삭제하는 것이 아닌 메모리에서 삭제하는 것. commit으로 디스크에서 삭제함.



- commit
메모리에 상주된 데이터를 디스크에 기록하는 명령어
ex: commit;

- rollback
메모리에 상주된 데이터를 삭제하는 명령어
ex: rollback;


WRITTEN BY
빨강꼬마

,

- 생성되어진 테이블스페이스의 정보를 조회(sys에서만 가능)


select * from dba_tablespaces;

- 테이블 스페이스의 실제 파일명 확인 명령어


select * from dba_data_files; 

 

- 하나의 분할파일처리된 tablespace일 경우 여러개의 파일로 구성되어 있으므로
  특정 테이블이 어느 곳에 위치하는 지 확인하는 명령어


select * from dba_extents
where tablespace_name = '[분할파일처리된 tablespace명]';

- 시스템 권한의 종류 알아보기
  (ex: create session 이나 create table과 같은 시스템 권한들)


select * from system_privilege_map;

 

- 테이블 생성하기

 


create table testtable
(
sano             number(4),
name           varchar2(10),
jik                  varchar2(10)
) tablespace largekhtbs;
 - 테이블 스페이스를 지정하지 않으면 작업중인 계정에 디폴트로 되어 있는 테이블 스페이스로 테이블이 생성됨
 - 만약 작업중인 계정에 설정된 기본 tablespace가 아닌 다른 tablespace로 지정하여 생성하려면 오류가 발생됨
   이는, 추가로 sys계정에서 quota를 사용하여 추가 tablespace를 지정하지 않았기 때문임.

 

- 일반사용자계정의 경우 기본적으로 기본 tablespace에만 테이블 생성이 가능한데,
  다른 tablespace에도 테이블생성이 되도록 권한을 주는 명령어

 


alter user [일반사용자계정]
quota 20m on [추가하려는 tablespace명];


WRITTEN BY
빨강꼬마

,

◆ Oracle SQL Developer tool ◆

- http://www.oracle.com 에서 Developer Tools 중 SQL Developer을 선택하여 다운로드 후 설치
  (사용중인 O/S에서 JDK 포함 여부를 확인하여 적절한 파일로 다운받아 설치)

- 접속 계정 설정

 
이미지에 보이는 + 아이콘을 클릭하여 아래의 이미지처럼 정보를 입력하여 접속계정을 설정해야함.
sys계정의 경우 롤 값을 SYSDBA로 설정해야만 접속이 가능함.

 

정보를 잘못 입력하였을 경우 아래의 이미지처럼 경고문구가 출력되며 설정이 불가능함.

 

- 현재 오라클 서버에 접속한 사용자명을 보여주는 명령어
select username from user_users;

- 현재 오라클 서버에 접속한 사용자 소유의 테이블과 뷰의 목록을 보여주는 명령어
select * from tab;

- 주석문 처리
 - -- 를 사용하면 -- 이후 오는 한줄내 모든 단어를 주석처리함
 - /* */을 사용하면 줄과 상관없이 /* 과 */ 사이의 모든 단어를 주석처리함

- table, row, column
아래의 이미지처럼 특정 테이블을 기준으로 파랑색의 세로는 컬럼(column) 노랑색의 가로는 행(row) 붉은색 전체를 테이블(table)로 구분함

 

 

- 오라클 사용자 계정 만들기
sys계정에서만 가능한 명령어
create user 생성할ID identified by 생성할ID가 사용할 비밀번호
default tablespace 디폴트로설정할 tablespace명
quota 8m on 디폴트tablespace명;
 - 계정을 생성할때에는 반드시 기본 테이블 스페이스와 사용될 공간을 지정해야함
 - 사용자 계정을 만든 이후에는 create session 권한을 sys계정에서 주어야 접속이 가능함.
 - quota 명령어를 사용하여 사용될 용량을 지정시킴. (unlimited옵션을 사용하여 해당 테이블 스페이스의 모든 공간을 사용가능하게 할수있음)
 - 일반 사용자 계정의 경우 테이블 생성에도 grant 명령어를 사용하여 권한을 주어야 테이블 생성이 가능해짐.

- segment
테이블과 인덱스를 합쳐 세그먼트라 칭함

- tablespace
실제 테이블데이터가 쓰여질 파일공간을 칭함

- tablespace 생성하기
create tablespace [만들 테이블스페이스 이름지정]
datafile 'c:\khoracledata\[만들 테이블 스페이스 이름.dbf]' size [X]
extent management local -- extent = 확장율. extent도 자동으로 확장하도록 설정
segment space management auto; -- segment = 인덱스와 테이블을 합친것. 그리고 자동으로 segment를 잡아주도록.

 - tablespace를 생성하기 위해서는 반드시 3가지가 설정되어야 한다.
  - 파일의 용량 및 용량 확장율, 세그먼트의 공간 지정
 - 실제 데이터파일의 확장자는 DBF로 지정
 - SIZE의 지정단위는 KByte와 M의 단위만 사용됨
          (EX: SIZE 40m, SIZE 800k)

- tablespace 분할 생성하기
 - 파일의 용량이 커지면 메모리에 올라갈 데이터도 커지기 때문에, 확인하여야할 데이터가 있는 최소한의 데이터만
   메모리에 등록할 수 있도록 하나의 tablespace를 여러 파일로 분할하여 생성할 필요성이 있음.

create tablespace [만들 테이블스페이스 이름지정]
datafile
'g:\oracle_prac\tablespace\[만들 테이블스페이스 이름지정01.dbf]' size 40m
autoextend on
next 8m maxsize 80m,
'g:\oracle_prac\tablespace\[만들 테이블스페이스 이름지정02.dbf]' size 40m
autoextend on
next 8m maxsize 80m,
'g:\oracle_prac\tablespace\[만들 테이블스페이스 이름지정03.dbf]' size 40m
autoextend on
next 8m maxsize 80m,
'g:\oracle_prac\tablespace\[만들 테이블스페이스 이름지정04.dbf]' size 40m
autoextend on
next 8m maxsize 80m
extent management local
segment space management auto;

 - autoextend on은 지정한 40메가를 오버할 경우 자동으로 크기가 늘어나도록 처리하는 명령어
 - next는 지정한 사이즈를 제일 처음 오버하였을때 next로 지정한 용량만큼 확장시켜주도록 하는 명령어

- 생성되어있는 모든 tablespace의 정보를 확인하는 명령어 (sys계정에서만 실행가능)
select * from dba_data_files;


WRITTEN BY
빨강꼬마

,

오라클 설치

- http://www.oracle.com 에서 Oracle Database 11g Release 2 Express Edition 을 다운받아 설치

- 설치된 O/S 에 맞춰서 다운로드

- 설치도중 출력되는 내용중 설치폴더와 Home/Basic 경로 및 포트번호가 출력되는 부분은 복사하여 별도로 보관

- 오라클 설치 이후 컴퓨터 이름을 변경할 경우 정상적인 오라클 구동이 불가능함.

  컴퓨터 이름을 설치 이후 변경하였다면, 아래의 방법을 통해 몇가지를 수정하여야 함.

ⓐ 아래 경로의 두 파일을 메모장으로 열기(오라클을 Default 경로로 설치한 경우)

  - C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\listener.ora

  - C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora

ⓑ (HOST = ****)에서 **** 부분을 컴퓨터명을 최종적으로 변경한 컴퓨터 이름으로 변경

ⓒ c:\> 프롬프트를 띄운후 아래의 명령어를 순차적으로 입력

  - C:\>Lsnrctl stop

  - C:\>Lsnrctl start

ⓓ ⓒ에서의 명령어 입력 후 successfullty 가 출력되면 수정완료


SQL 프롬프트 구동 명령


- show user

  현재 접속중인 사용자의 ID를 확인


- exit

  SQL 프롬프트를 종료하는 명령어


- connect

  생성된 ID와 PW를 사용하여 접속하는 명령어.

  conn 명령어로 접속후 다른 사용자ID로 conn을 사용할때에는 시스템이 자동적으로 conn -> disconn -> conn 과정을 거침

  conn 으로 줄여서 사용하기도 하며, 아래 4가지 방법으로 SQL에 접속가능함





※ sys 계정은 system계정 및 일반 계정들과는 다르게 최종관리자 권한을 가진 계정으로 일반적인 접속방법과는

   조금 다르게 접속명령 가장 뒤에 as sysdba 가 반드시 붙는다





※※ conn /as sysdba 를 사용하면 즉시 sys계정으로 로그인되는데, 보안위험 제거를 위해 이를 막기 위해서는 

     내컴퓨터 -> 관리 -> 로컬 사용자 및 그룹 > 에 ORA_DBA 내 구성원에 administrator를 삭제해야함

- disconnect

  현재 접속한 사용자의 로그아웃을 위한 명령어




- /nolog

  SQL 프롬프트를 먼저 구동한 후 접속할때 C:\> 에서 SQLPLUS 명령어 사용시 사용하는 옵션




- SHUTDOWN IMMEDIATE

  sys 계정으로만 접속하였을때 사용가능한 명령어로써 오라클 DB를 중지시키는 명령어

  그 외 계정으로 실행하였을때는 실행이 불가능함



- STARTUP

  중지된 오라클DB를 구동시키는 명령어


- 사용자 비밀번호 변경 명령어

  alter user 사용자ID identified by 변경할패스워드

  패스워드는 숫자+영문(소)+영문(대)+특수문자 조합으로 8글자 이상이 되어야 함

  (express 버젼에서는 소문자와 대문자 구별을 별도로 하지 않음)


- host

  윈도우 커맨드를 실행할때 SQL 프롬프트상에서 사용하는 명령어

  기타 명령어 없으 SQL> host를 입력하면 잠시 C:\> 로 상태가 변경되며, exit를 입력하면 SQL 프롬프트로 돌아옴




- 사용자계정의 LOCK 상태와 EXPIRED 상태

  사용자계정중 LOCK과 EXPIRED 상태가 되어 있는 계정이 있을 수 있는데,

  LOCK은 사용이 잠긴 상태이고, EXPIRED는 비밀번호를 재설정하여야 해제할 수 있다.

  LOCK    해제: alter user 해제할사용자ID account unlock;

  EXPIRED 해제: alter user hr identified by 변경할 비밀번호



WRITTEN BY
빨강꼬마

,