'Oracle Database 10g'에 해당되는 글 8건

  1. 2010/08/06 boyo 7.12
  2. 2010/08/06 boyo 7.7 ~7.9
  3. 2010/08/06 boyo 7.2 / DCL
  4. 2010/08/06 boyo 6.30 / DDL and Transantion
  5. 2010/08/06 boyo 6.26 / Type of Join
  6. 2010/08/06 boyo 6.25 / Date and Nesting Function
  7. 2010/08/06 boyo 06.23 / sqlplus & function
  8. 2010/08/06 boyo 06.22 / oracle install & sql intro

7.12

Oracle/PLSQL 2010/08/06 14:12

 begin
        execute immediate 'create table xce8(x date)';
exception
        when others then
                if sqlcode=-955 then
                        dbms_output.put_line('----------');
                        dbms_output.put_line(sqlerrm);
                        dbms_output.put_line('----------');
                end if;
end;
/


--user-defined exceptions : 논리적 error에 대한 처리
--ex) sal < 0 논리적 오류

--에러 지정 방법
declare
        min exception;
 begin
    for c in (select * from emp where deptno=30) loop
        if c.sal < 0 then
                RAISE min;
        else
            dbms_output.put_line(c.sal);
        end if;
    end loop;
exception
        when min then
                dbms_output.put_line('min error');
end;

--RAISE_APPLICATION_ERROR Procedure : error번호까지 만들어서 error발생 -> 프로그램단에서 처리하기가 용이.
-- error번호 기존 error번호와 겹칠 수 있음 그래서 특정 대역을 사용 –20000 ~ –20999
declare
        min exception;
begin
    for c in (select * from emp where deptno=30) loop
        if c.sal < 0 then
                raise min;
        else
            dbms_output.put_line(c.sal);
        end if;
    end loop;
exception
        when min then
                dbms_output.put_line('min');
                RAISE_APPLICATION_ERROR(-20111,'min error 2');
end;
/

-- 둘다 파라미터가 있음
/*
1.procedures : 리턴값이 없는 function, 재사용 가능
 subprograme : function, trigger

*/
-- functions : 리턴값이 있음

--객체생성
create procedure ce8
as
begin
        dbms_output.put_line('------------');
end;
/
--실행방법 exec ce8


--객체 확인
select object_name, object_type from user_objects where object_name='CE8'

--파마리터값 받아서 평균 출력(user defined function)
create or replace function avgsal(deptnox number)
     return number
  as
     sumx number(10);
 begin
     select avg(sal) into sumx from emp where deptno=deptnox;
  return sumx;
end;
 /

--실행 select ename from emp where sal < avgsal(10);

--EM(Enterprise Manager=(GUI관리툴))
--http://192.168.186.3:1158/em/
-- Performance(튜닝) Administration(셋팅) Maintenance(유지보수)

--구구단
create or replace procedure gugu(dan number)
as
begin
        for i in 2..9 loop
                dbms_output.put_line(dan || 'x' || i || ' = ' || dan*i);
        end loop;
end;

--실행방법 ( exec gugu(8) )

create or replace procedure tp2(su number, su2 out number) as
begin
        su2 := su+1;
end;
/

declare
        x number := 9;
begin
        tp2(1,x);
        dbms_output.put_line(x);
end;
/

--x 결과값은 2

--out의 용도 : 프로시저 내부에서 바꾼 값을 invoke해준 블록에서 적용이 되게 함
create or replace procedure tp3(su in out number) as
begin
        su := su+1;
end;

--in방식에서만 숫자 가능, out방식은 변수만 가능

--procedure 생성(파라미터를 in으로 받아서 out으로 보내는 것으로 이해)
CREATE OR REPLACE PROCEDURE getdl(pdeptno number, pdname out dept.dname%type, ploc out dept.loc%type) as
begin
        select dname, loc into pdname, ploc from dept where deptno = pdeptno;
end;

--생성된 프로시저 실행하기
declare
        dname dept.dname%type;
        loc dept.loc%type;
begin
        getdl(10, dname,loc);
        dbms_output.put_line(dname || ',' || loc);
end;

2010/08/06 14:12 2010/08/06 14:12

7.7 ~7.9

Oracle/PLSQL 2010/08/06 14:11
-- 1.출력 프로시저
exec dbms_output.put_line(3*4);
2. 출력안될때 실행해야 하는 명령
set serveroutput ON

--기본 문
DECLARE
        event VARCHAR2(15); -- 변수 선언
BEGIN
 --변수 정의
        event := q'!Father's day!';
 --출력
        DBMS_OUTPUT.PUT_LINE('3rd Sunday in June is :'||event);
        event := q'[Mother's day]';
        DBMS_OUTPUT.PUT_LINE('2nd Sunday in May is :'||event);
END;

--대입
:=
x NUMBER DEFAULT 2;
--비교
=

--%type : 테이블의 타입정의를 가지고 옴
declare
        v_id txx.id%type := &id;
        v_data txx.data%type := '&data';
begin
        insert into txx values(v_id,v_data);
end;

var x number
EXEC :x := 30
SELECT * FROM dept WHERE deptno=:x;

print x

--암시적 커서 예
begin
        for c in(select * from emp) loop
         dbms_output.put_line(c.ename);
        end loop;
end;

--명시적 커서 예
declare
  cursor c is select ename from emp;
  e emp.ename%type;
begin
  open c;
  loop
        fetch c into e;
        exit when c%notfound;
         dbms_output.put_line(e);
  end loop;
  dbms_output.put_line(c%rowcount);
end;

--IF문
declare
        v_dept varchar(10);
begin
        for c in(select * from emp) loop
          if c.deptno = 10 then
                v_dept := 'acc';
          elsif c.deptno = 20 then
                v_dept := 'res';
          elsif c.deptno = 30 then
                v_dept := 'sal';
          else
                v_dept :='n/a';
          end if;
                dbms_output.put_line(c.ename || ',' || v_dept);
        end loop;
end;

--case 문
declare
        v_dept varchar(10);
begin
        for c in(select * from emp) loop
        dbms_output.put_line(c.ename || ',' ||
        case c.deptno
                when 10 then 'acc'
                when 20 then 'res'
                when 30 then 'sal'
          end
        );
        end loop;
end;

--for문
begin
   for dan in 2..9 loop
        exit when dan >= 2;
        for i in 1..9 loop
                dbms_output.put_line(dan ||'X'||i||'='||dan*i);
        end loop;
   end loop;
end;

-- scalar types( 값 <> vector)
-- records 변수인데 값이 여러개 C언어의 struct
-- collections record를 묶어 놓은 c언어에서의 struct array

--rocord
DECLARE
 --일부 컬럼도 가능
 type dept_type is record(DEPTNO NUMBER(2), DNAME VARCHAR2(14), LOC VARCHAR2(14));
 dept_row dept_type;
 --dept_row dept%rowtype; -- 전체 컬럼만 가능
begin
 select * into dept_row from dept where deptno=10;
 insert into dept values(dept_row.deptno+1, dept_row.dname, dept_row.loc);
end;

--레코드를 이용한 출력 방법
-- 변수 r은 암시적으로  emp%rowtype이 됨.
begin
        for r in (select * from emp) loop
                if r.deptno=10 and r.sal+nvl(r.comm,0) > 2000 then
                        dbms_output.put_line(r.ename || ',' || r.sal);
                end if;
        end loop;
end;


declare
 type t is record(deptno number(2),dname varchar2(14),loc varchar2(13));
 type tt is table of t index by pls_integer;
 r t;
 rs tt;
 i number(2) :=0;
begin
 select * into r from dept where deptno=10;
 dbms_output.put_line(r.dname);
 for r in(select * from dept) loop
  rs(i) :=r;
  -- dbms_output.put_line(r.dname||i);
  i:=i+1;
 end loop;
 for j in 0..i-1 loop
  dbms_output.put_line(rs(j).dname);
 end loop;
end;
/


--Explicit cursors (명시적 커서)

--명시적
begin
 FOR i IN (SELECT * FROM emp) loop
  dbms_output.put_line(i.ename);
        end loop;
end;
/

--명시적 커서
declare
        cursor c is select ename from emp; --선언
        ename emp.ename%type;
begin
        open c; --open
        loop
                fetch c into ename; -- fetch
                exit when c%notfound; --속성이용 나오기
                dbms_output.put_line(ename);
        end loop;
 CLOSE c; --close
end;
/

-- 타입 지정과 명시적 커서 사용
--
declare
        type t is record(ENAME emp.ename%type, SAL emp.sal%type);
        deptnox emp.deptno%type :=10;
        cursor c is select ENAME, SAL from emp
                     where deptno=deptnox;
        r t;
begin
        deptnox:=20;
        open c;
        loop
                fetch c into r;
                exit when c%notfound;
                dbms_output.put_line(r.ename || ',' || r.sal);
        end loop;
        close c;
end;

--- 커서 카운트
declare
        deptnox emp.deptno%type;
        rcount number(2);
        cursor c is select * from emp
                     where deptno=deptnox;
begin
        deptnox:=20;
        for r in c loop
                dbms_output.put_line(r.ename||','||r.sal);
                rcount := c%rowcount;
        end loop;
        dbms_output.put_line(rcount);
end;

----------------중요 코드(함수형식으로 콜) 파라미터
declare
           cursor c(deptnox number) is select ename,sal from emp
                        where deptno=deptnox;
           ename emp.ename%type;
        rcount number(2);
begin
      for r in c(10) loop
              dbms_output.put_line(r.ename||','||r.sal);
                rcount := c%rowcount;
      end loop;
        dbms_output.put_line(rcount);
 end;
/


--select update 동시

declare
 r emp%rowtype;
 cursor e is select * from emp where ename='BLAKE' for update of sal nowait;
begin
 open e;

 fetch e into r;
 dbms_output.put_line(r.ename || ',' || r.sal);
 update emp set sal=sal+1 where current of e;

 close e;
end;


--error handling
begin
        dbms_output.put_line(1/(1-1));
exception
        when ZERO_DIVIDE then
                 dbms_output.put_line('su /0 <--err');
end;


declare
        ename emp.ename%type;
        cursor c is select ename from emp where deptno=40;
begin
        open c;
        loop
                fetch c into ename;
                exit when c%notfound;
                dbms_output.put_line(ename);
        end loop;
end;

--2개의 에러 처리
declare
        r emp%rowtype;
begin
        select * into r from emp where deptno=30;
        dbms_output.put_line(r.ename);
exception
        when NO_DATA_FOUND then
                dbms_output.put_line(' no data');
        when TOO_MANY_ROWS then
                dbms_output.put_line('many row');
end;

2010/08/06 14:11 2010/08/06 14:11

7.2 / DCL

Oracle/SQL 2010/08/06 14:09
with read only 읽기 전용
select view_name from user_views;--뷰 확인
sequences
일련번호 생성기, PK 기본값
next.val : transaction의 영향 안받음., 다음 숫자
currentval.val : transcation의 영향 받음., 세션에서의 마지막 리턴 숫자
cache 메모리에서 미리 읽어 드림.
cycle : maxvlaue에 도착하면 minvalue로 바꿔라

create sequence ss
increment by 10
start with 5
maxvalue 20
minvalue 3
cycle
nocache

select sequence_name from user_sequences;
시퀀스 확인

index
select index_name from user_indexes
인덱스 확인
index은 primary key로 설정하면 인덱스가 자동으로 생성
primary key로 생성된 인덱스 삭제 방법
alter table ttt drop constraint sys_C005440;
수동으로 생성된 인덱스 삭제 방법
drop index index_name;

물리적인 rowid 확인
select comm, rowid from emp where comm is not null order by comm

built-in view
 performance view - from 메모리(V$~~시작 : v$fixed_table)
 data dictionary view - from 파일 [dictionary view] : (DBA_~~ : 전체, ALL_~~ : 접근가능한, USER_~~ : 내가소유한)

 scott 소유한 테이블
 select count(*) from user_tables;
 scott 접근 가능한 테이블
 select count(*) from all_tables;
 db전체의 테이블 수(sysdba)
 select count(*) from dba_tables;
 전체 view(sysdba)
 select count(*) from dba_views;
 현재 접속자(session) 리스트(sysdba)
 select username from v$session where username is not null

세션관련 테이블
select name from v$fixed_table where name like '%SESSION%';

--built-in view검색하기(save fv)
select view_name from dba_views where view_name like upper('%&key%')

select CONSTRAINT_NAME, CONSTRAINT_TYPE from USER_CONSTRAINTS where TABLE_NAME='EMP'

07.02 오후 dcl

grant select on emp to hr;
revoke select on emp from hr;
rol 권한의 집합, 권한 받을 때는 유저처럼 권한 줄때는 system권한처럼...

ddl -- alter문
 add - defualt
 modify - defualt
 drop

flashback 기능 -> 과거의 변화를 추적 혹은 복원
external 테이블 -> text파일을 select할 수 있음.

flashback

external tables -> text파일을 select할수 있음

insert all
insert first

dss 의사결정지원 시스템
dw-dss 분석
1.자료수집 - external table
2.분류작업 -
3.분석
4.레포팅
rollup : 부분합
cube : cross tabulation질의 (차원질의,타블릿질의)

5장
date
timestamp : 소주점 이하 초까지
timestamp with timezone : 위에꺼 플러스 시간대 정보
timestamp with local timezone : 시간대 정보가 자동으로 변경
interval day to second (3 12:13:5) : 3일 12시간 13분 5초
interval year to month 3-4 : 3년 4개월

6장
서브쿼리

7장
트리구조 구현
self조인응용.

8장
Regular Expression(정규표현식)

기존    10g정규표현식 응용(4개 함수로)
컬럼명 like 키문자열  regexp_like(컬럼명,표현식)
replace    regexp_replace
substr    regxp_substr
instr    regxp_instr

2010/08/06 14:09 2010/08/06 14:09

statment-level rollback
ex)ddl 실패시 해당 문장만 rollback되고 자동으로 commit됨
read consistency commit하기 전까지는 다른 유저가 못 봄

table : 데이터를 저장하는 객체
view : select문 저장 객체(table처럼 사용됨)
sequence : 일련번호 생성기
 create sequence t2s;
 t2s.nextval;
 select t2s.currval from dual;

index : 검색속도 향상위해 미리 만든 객체
create index

synonym : 동의어

질의 실행 시간 측정 (set timing on)
질의의 실행 계획 확인 set autot on exp
truncate 공간까지 비워짐(delete은 undo 테이블에 복사하기때문에 느리고 공간도 안비워짐)

select emp.ename from scott.emp; 테이블 명과 유저명 생략(당연한 거니까 ㅋㅋㅋ)
다른 유저의 테이블을 볼러면 유저명을 써서 사용한다.

data types
varchar2(size) 가변길이-> 글자영릐 넓이값까지 저장, 공간은 덜차지
char(size) 고정길이: 글자1이 들어가도 넓이값만큼 공간차지
number(p,s) p: 전체넓이, s : 그중에서도 소주점으로 사용할 자리수.
datetime data types
timestamp : 소주점이하까지
interval year to month
interval day to second
timestamp with local time zone : 자동으로 변환해서 저장.

not null 널을 허용 안함
unique 중복을 허용 안함, 에러위치 모름
primary key not null + unique
foreign key 다른(특정) primary key값만 허용.
check 특정 조건만 허용

talbe level로 하는 것을 권장
inline방식 constraint 지정
create table tc2(xx number unique, x2 number); column level
outline방식 constraint 지정
create table tc2a(xx number, yy number, constraint tc2a_uk unique(xx)) table level

create table tc4( id number, yy number, deptno number, constraint tc4_fk foreign key(deptno) references dept(deptno));
constraint tc5_ck check(xx>0);

not null talbe level constraint을 지원하지 않음

crating table as : constraint는 복사가 안됨

alter table
alter table d2 add(xxx number);
alter table d2 add constraint d2_pk primary key(deptno);
alter table d2 modify(xxx number(4) default 0);
alter table d2 drop column xxx;
alter table d2 drop(loc);

테이블이 이미 있다고 하면 찾아보기 (시퀀스나 인덱스에 있을수 있음)
select object_name, object_type from user_objects where object_name like '%&key%'

simple view는 dml이 모두 가능

2010/08/06 14:08 2010/08/06 14:08

6.26 / Type of Join

Oracle/SQL 2010/08/06 14:08
  1.  natural join
     이름 같은 컬럼 1개. -join 1개
     join되는 컬러이름 지정부 생략
  2. inner join(기본 조인)
     using 사용가능(table alias 생략 가능)
     on절에서는 table alias 생략 불가
  3.  outer join
     using 사용가능
  4.  cross join

on clause
 : 모든 경우 가능, table alias 필수

self-joins
 : inner joind의 응용, where 대신 and 가능

non-equijoins
 : on절에서 = 대신 between문 사용. ( 등급 표시를 구현이 목적)

92버전
(+)족이 덤.(+)안한 쪽이 다 나옴.

inner versus outer joins (join되는 컬럼의 값이 널이라도)

left outer join 왼쪽이 다 나오게
right outer join 오른쪽이 다 나오게
full outer join 양쪽 다 나오게

cartesian products 모든 경우의 수 다나오게

cross join 카르티잔 곱 (on, using 쓰면 에러)
natual join (on, using 쓰면 에러)

subqueries
row 1개 리턴(값) : single row subquery
row n개 리턴(값) : multi row subquery
뷰형태(2차원) : view style의 subquery

 () singlerow일때는 상관없음 multirow일때 중의
multirow (in,any,all)


select rownum, rowid, deptno, dname from dept;

    ROWNUM ROWID                  DEPTNO DNAME
---------- ------------------ ---------- --------------
         1 AAAMfKAAEAAAAAQAAA         10 ACCOUNTING
         2 AAAMfKAAEAAAAAQAAB         20 RESEARCH
         3 AAAMfKAAEAAAAAQAAC         30 SALES
         4 AAAMfKAAEAAAAAQAAD         40 OPERATIONS

rownum은 order by이 하기전의 출력 순서

multirow ex)
select ename, sal, rownum
  2  from (select ename, sal from emp order by sal desc)
  3  where rownum <= 5;

ENAME             SAL     ROWNUM
---------- ---------- ----------
KING             5000          1
SCOTT            3000          2
FORD             3000          3
JONES            2975          4
BLAKE            2850          5

any 하나의 조건이라도 만족하면 됨
all 모든 조건을 만족해야 됨

union (합집합)

SQL> select ename from emp
  2  union
  3   select dname from dept;

ENAME
--------------
ACCOUNTING
ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER

ENAME
--------------
OPERATIONS
RESEARCH
SALES
SCOTT
SMITH
TURNER
WARD

18 rows selected.


union all(정렬을 안해서 빠르다)
교집합
차집합 minus 순서조심(결과 다름)
union 합집합 (중복제거, 집합이기때문에 내부적 정렬)

col "1" noprint 컬럼 리스트 안나옴


읽기 일관성 : commit하기 전까지 다른 유저는 보지 못함.

2010/08/06 14:08 2010/08/06 14:08
  1. 단위

     10^3 k
    10^6 m
    10^9 g
    10^12 t
    10^15 peta
    10^18 exa

  2. date function
  3. months_between 월과 월차이
    add_months 몇개월후
    next_day 돌아오는 해당일
    last_day 해당월일의 마지막날
    round 반올림
    trunc 내림
  4.  implicit(암시적,자동)
    select last_day(sysdate-30) from dual;
  5. explicit(명시적, 수동)
    select to_char(1)||to_char(1), to_number('1')+to_number('1') from dual;
  6. 문자->날짜
    select sysdate-to_date('1986.09.30','yyyy.mm.dd') from dual
  7. 날짜-문자
    select to_char(sysdate,'yyyy')||'년 ' || to_char(sysdate,'MM')||'월' from dual

    hh:hour,hh24,mi:분,ss : 초,ff6: 소수점 이하 초(6자리

    yy(95을 2095년으로 인식) rr(1950~2049년으로 자동 mapping)

  8. nesting functions(중첩 가능한 이유는 리터값이 1개라서)
  9. nvl 널이면 특정값으로 변환
  10. nvl2 널이면 두번째값 리턴 아니면 세번째값 리턴
  11.  SQL> select nvl2(null,1,2), nvl2(123,1,2) from dual;

    NVL2(NULL,1,2) NVL2(123,1,2)
    -------------- -------------
                 2             1

  12. nullif 같으면 널 값리턴, 다르면 첫번째 값

    select nullif(1,1), nullif(1,2) from dual;
    NULLIF(1,1) NULLIF(1,2)
    ----------- -----------
                          1

  13.  coalesce : nul중첩 (null이 아닌 첫번째 파라미터 리턴)
    select coalesce(null,null,null,1) from dual

    COALESCE(NULL,NULL,NULL,1)
    --------------------------
                             1

  14.  성능 때문에
    case expression(where절에서 많이 사용)
    select ename,
        case deptno
         when 10 then 'ACCOUNTING'
        when 20 then 'RESEARCH'
        when 30 then 'SALES'
        when 40 then 'OPERATIONS'
        else 'OPERATIONS'
       end dname
        from emp;
  15.  decode function(select와 from사이에 사용)

    select ename,
    decode( deptno
    , 10 , 'ACCOUNTING'
    , 20 , 'RESEARCH'
    , 30 , 'SALES'
    , 40 , 'OPERATIONS'
    , 'OPERATIONS'
    ) dname
    from emp


     버퍼 사용시 중간 강제 종료시 해결 방법
    ed을 수정하는 중 강제 종료 되면 swp 파일이 남아 있다
    그럼 sqlplus로 접속후 ed 편집하면 에러 메시지 발생
    그럴경우 rm .*.swp 실행

  16.  메뉴얼 보는 법

     otn.oracle.com -> documentation
    키워드 이용 : 단어는 아는데 뜻을 모르는 경우
    ex)는 oe/oe or hr/hr 계정에서
    분류체게 이용. 뜻은 아는데 단어를 모르는 경우
    books->

  17.  락 풀기
    alter user oe identified by oe account unlock;
  18.  4장

    aggregated (group multi-row에 대해 연산하는...)
    select job, count(*) from emp group by job having count(*)>1
    job별로 1명이상인 job의 명수를 구하기.
    stddev 편준편찬(값자체를 이용할때), variance 분산(단순비교형)
    count(컬럼)널이 아닌 값의 갯수
    count(*) row의 갯수
    select avg(nvl(comm,0)) from emp;

    group by 묶은 컬럼명만 사용 가능
    select deptno, avg(nvl(sal,0)), sum(sal) from emp group by deptno;

  19.  5장
    multiple tables (join -92, 99)
    sql 92를 통한 조인
2010/08/06 14:08 2010/08/06 14:08
  1. 질의의 기본 절차
    1. 접속
       conn scott/tiger
    2. 테이블 리스트 확인
       select * from tab;
    3. 테이블 컬럼 리스트
       desc dept;
    4. 질의 확인
      select * from table_name;
  2. sqlplus 명령어
    list : 마지막 실행 명령어
    run : 마지막으로 실행시킨(버퍼에 있는) 명령 실행
    conn : 접속
    show user : 접속한 유저명 보기
    save t : 버퍼에 있는 명령 저장
    @t : 실행(확장자 sql로 자동) t는 파일명
    ! : command 창으로 나가기
    exit : 다시 들어오기
    get t : 해당 파일 불러오기
    ed t : 해당 파일 수정하기
    ed : 버퍼를 편집 - sql명령 1개만 편집가능
    sav t replace : 덮어 씌기
    show all : 설정사항 확인
    set command : 설정 사항 변경
    set linesize : 라인 크기
    /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql : 세팅 파일
  3. isqlplus : 웹버전 sqlplus
  4. SQL

    select
    * 모든 컬럼
    distinct 중복제거
    expression : 계산식 계산
    alias : 컬럼의 heading을 지정

sql는 대소문자(case-sensitive) 구별 안함. 단 따옴표("')안에서는 구분
' : 문자열
" : 객체명, 비번 컬럼 alias

select 300*3 from dual; dual 가상 테이블 1개만 나오게 함
null값 연산은 null 값

concatenation operator : 문자열 더하기 ||


EX)

select 1+'1', '1'+'1', 1||1, '1'||'1' from dual;

     1+'1'    '1'+'1' 1| '1
---------- ---------- -- --
         2          2 11 11

  1. literal character strings
    select 'Mr. '||ename from emp;

    'MR.'||ENAME
    --------------
    Mr. SMITH
    Mr. ALLEN
    Mr. WARD

  2. alternative quote(q) operator
    select 'Mr. '||ename||'''s salary is '||sal from emp

    'MR.'||ENAME||'''SSALARYIS'||SAL
    -------------------------------------------------------------------
    Mr. SMITH's salary is 800
    Mr. ALLEN's salary is 1600


    select 'i''m a boy.' from dual; //9i버전
    select q'-i'm a boy.-' from dual; //10g 버전

  3. distinct : duplicate rows

  4. isqlplus (익스플로러 영문으로 해야 깨지지 않음)

  5. append sql

    EX)
    SQL> select * from
      2
    SQL>
    SQL> a  emp
      1* select * from emp
    SQL> r
      1* select * from emp

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20

where 은 로우 마다 비교

정규표현식 검색

is null
is not null

rules of precedence (연산자 우선순위)
(), */+-, ||(문자열 더하기) , < =, like, is null, between, between, not, and, or

&변수 정의 / 매번 실행 물어봄
&&변수 / 처음 한번만 물어봄 , define 변수에 등록함
define 환경 변수 셋팅
undefine sortcolumn 환경변수 지우기
set verify off

  1. Function
    1. user defined function : pl/sql 로 만든 함수
    2. built-in function
      1.  single function :
          ex)
          select power(2,10) from dual;,
          select ename, sal+nvl(comm, 0) from emp;
          select ename from emp where ename like upper('%bl%')
        1. character : lower, upper, initcap
             concat ||
             substr 뽑아내기
             length 길이
             instr 몇번째 있는가?
             lpad | rpad 채우기
             trim 양끝단 '' 없애기
             replace 치환
        2. number
             round : 반올림 round(11.2111, 2)
             trunc : 내림
             mod : 나머지 mod(1600,300)
        3. date function : sysdate(시스템 날짜)
              alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
             1일(시간) = 숫자 1
             시각 + 시간 = 시각
             시각 - 시각 = 시간
             하루 1440분 / 86400초
        4. conversion
        5. general
      2.  group function : count(*), sum(sal)
    3. function의 arg는 n개 result는 1개
2010/08/06 14:07 2010/08/06 14:07
  1. 윈도우 오라클 설치
    1. setup 실행 안될 시
    2.  / install/oui 실행 후 설치
  2. 설치시 주의점
    1. 설치 파일이 있는 폴더에 한글이나 특수문자 있으면 안됨.
    2.  설치 유저명에 특수문자나 한글 있으면 안됨.
    3. 기존 버전 정리... 처음 설치시는 삭제
  3. 기존 버전 설치 여부 확인 방법
    1. cmd -> sqlplus
    2. 제어판 - 관리도구 - 서비스 - 관련서비스가 있음
  4. 설치 후 확인 절차
    1. cmd -> sqlplus / as sysdba  -> select status from v$instance;

      STATUS
      ------------
      OPEN  <-- 설치 완료

  5. 윈도우 오라클 삭제 방법
  6.  실행 - regedit

  7.  local_machin - software - oracle <- delete

  8.  local_machin - system - controlset001 - services - oracle 시작하는 서비스 4개(기본적으로)
    - controlset 폴더 있는 거 전부 2차 처럼 지우기

  9.  재부팅

  10.  c:\Program files\oracle <- 폴더 삭제

  11. INTRO
    1. 소개

    Dr.E.F.Codd(전산, 집합론)
    IBM에서 상용화

  12. 데이터베이스와의 차이점

    종이문서 : 간단한 경우

    EXCEL  : 복사 용이, 보관용이 / 파일을 메모리에 올리기 때문에

    데이터베이스 : 동시사용자 지원, 대용량 지원

  13.  정리

    인사DB 샘플
     직원명부 부서리스트
    SCOTT  EMP   DEPT     <--수업용
    HR EMPLOYEES DEPARTMENTS <--숙제용, 교재용

    설계시 Entity / 테이블 (실제 존재)
    Attribute 컬럼
    UID PK

    PK(NOT NULL + UNIQUE)
    FK(다른 테이블의 PK만 들어오도록 함)


    select from  SQL -> oracle server
    테이블 <-  Cursor

    빌트인 뷰

  14. SQL

    1. Query

      select

    2. DML

      insert  
      update
      delete
      merge 있으면 업데이트 없으면 삽입

    3. DDL
      create  
      alter
      drop
      rename
      truncate 비우기
      comment 주석달기

    4. DCL

      grant  권한주기
      REVOKE 권한뺏기

    5. Transaction

      Transaction (all or nothing) 전무 혹은 전부를 보장
      저장 commit
      취소 rollback
      savepoint

    6. 기타

      DML (Transaction 수동)
      DDL DCL (Transaction 자동)

2010/08/06 14:06 2010/08/06 14:06