2009. 6. 30. 17:55

[Oracle] DML 절에 With Check option 조건

DML절에 With Check option절을 주어 View에서 생성된 조건에 대한 값을 반환과

동시에 DML에서 check 제약조건을 걸수 있다.
 

ex_) 

INSERT INTO  (  SELECT employee_id, last_name, email, hire_date, job_id, salary

                                FROM    empl3

                                WHERE  department_id = 50

                                WITH CHECK OPTION)

Values (9999, 'kkm', 'kyungmo', sysdate, 'kim', 5000);

 

View안에 where절을 보면 departmen_id값이 50인 값만을 반환한다. 동시에

department_id값에 check 제약조건을 50으로 걸어둔 것이다 .

 

지금 예문은

ORA-01402 : view WITH CHECK OPTION where-clauses violation

이렇게 에러가난다. 이유는 위에 설명과 같다.

insert되는 department값이 50값만 들어갈수 있는데. department_id 컬럼에 대한 명시는

insert절에 되어 있지 않다. 그래서 check 제약조건에 걸린다.

 

이걸 맞는 구문으로 바꾼다면 

INSERT INTO  (  SELECT employee_id, last_name, email, hire_date, job_id, 

                                               salary,  department_id

                                FROM    empl3

                                WHERE  department_id = 50

                                WITH CHECK OPTION)

Values (9999, 'kkm', 'kyungmo', sysdate, 'kim', 5000, 50);

이렇게 바꿔주면 check 제약조건에 걸리지 않는 쿼리가 된다.

2009. 4. 21. 10:26

'공룡' 오라클, 썬마이크로시스템즈 삼켰다

[지디넷코리아]IBM에 넘어갈듯 하던 썬마이크로시스템즈가 결국 'SW공룡' 오라클의 품에 안겼다. 오랫동안 SW사업에 집중해온 오라클이 마침내 서버와 스토리지 시장에 뛰어드는 것이란 점에서 IT업계 판세 변화에 비상한 관심이 쏠리고 있다.
 

오라클은 썬을 현금 74억달러 규모에 인수하기로 했다고 20일(현지시간) 공식 발표했다.

 

썬 인수로 오라클은 자바 기술과 솔라리스 운영체제(OS)로 대표되는 핵심 SW기술을 확보하게 됐다. 서버와 스토리지에 이르는 하드웨어 제품군도 흡수한 만큼 IBM, 휴렛패커드(HP), 델 등과의 일대일 대결도 불가피해졌다.

 

오 라클은 특히 썬이 소유한 자바를 높게 평가하는 모습이다. 래리 엘리슨 오라클 최고경영자(CEO)는 컨퍼런스콜에서 자바를 "지금까지 인수한 가장 중요한 단일 SW자산"이라고 치켜세웠다. 자바에 대한 혁신과 투자를 계속해 나가겠다는 뜻도 분명히 했다. 오라클 퓨전 미들웨어 제품군은 대부분 자바에 기반하고 있다.

 

오라클은 또 썬 인수를 통해 고객들에게 애플리케이션과 컴퓨팅, 데이터 스토리지 하드웨어를 번들로 제공할 수 있을 것으로 기대했다. 정상급 엔터프라이즈 소프트웨어와 핵심 컴퓨팅 시스템을 통합한 시스템 애플리케이션을 맞춤형으로 제공하겠다는 것이다.

 

최근 네번의 분기에서 세번이나 손실을 기록한 썬은 실적 부진을 돌파할 카드로 얼마전부터 매각에 적극 나섰던 것으로 전해졌다. 3월중순까지만 해도 IBM이 썬을 인수할 가장 유력한 후보였다. "협상 타결이 임박했다"는 보도까지 나왔다. 그러나 IBM은 반독점 규제에 걸릴 수 있다는 것을 이유로 썬 인수에 '회의모드'로 돌아선 것으로 전해졌다.

 

오라클은 상대적으로 반독점 이슈에 걸릴 가능성이 적다. 썬과 겹치는 사업 영역이 많지 않다는 이유에서다.

 

오라클은 그동안 썬의 실적이 좋지 않았지만 빠르게 복구할 수 있다는 입장이다. 썬이 첫해에만 회사 영업이익에 15억달러 이상 기여할 수 있을 것으로 기대했다.

 

일부 애널리스트들은 오라클의 이번 행보에 놀랍다는 반응이 많다. SW에 집중해온 오라클이 느닷없이(?) 하드웨어 시장에 뛰어든 탓이다.

 

오라클은 지난해 HP와 협력해 서버와 데이터웨어하우스(DW)를 통합한 어플라이언스 제품을 내놓기도 했지만 IBM, HP와 사실상 전면전을 의미하는 이번 인수와는 급이 다르다.

 

AMR리서치의 부루스 리차드슨 애널리스트는 "데이터베이스 회사가 하드웨어 고객 기반을 인수하는 것은 마지막으로 생각할 수 있는 것"이라며 오라클의 썬 인수에 쇼킹하다는 반응을 보였다. 

 

그런만큼 그는 오라클이  썬이 갖고 있는 하드웨어 자산을 계속 유지할지 아니면 나중에 매각할지에 대해서도 의문을 제기했다. 이에 대해 오라클 사프라 캐츠 사장은 "썬 하드웨어 사업은 오라클 내부에서 진행할 계획"이라고 말했다.



출처 << http://www.zdnet.co.kr/ArticleView.asp?artice_id=20090421073906

'IT Story' 카테고리의 다른 글

파일 시스템이란?  (0) 2010.08.03
Windows 7 에서 telnet 사용법  (1) 2010.01.03
관계형 데이터베이스의 시대가 지는가?  (0) 2009.04.14
IE8 속도, 라이브러리만 추가해도 빨라져  (0) 2009.04.10
SSD 상식  (0) 2009.04.07
2009. 4. 15. 14:59

[Oracle] 오라클 객체(4) [SYNONYM]

- SYNONYM은 오라클 객체(테이블, 뷰, 시퀀스, 프로시저)에 대한 대체이름(Alias)를 말합니다.

 

- Synonym은 실질적으로 그 자체가 Object가 아니라 Object에 대한 직접적인 참조 입니다.

 

- Synonym을 사용하는 이유는...

1) 데이터베이스의 투명성을 제공하기 위해서 사용 한다고 생각하면 됩니다.

    Synonym은 다른 유저의 객체를 참조할 때 많이 사용을 합니다.

 

2) 만약에 실무에서 다른 유저의 객체를 참조할 경우가 있을때 Synonym을 생성해서 사용을 하면은 추후에 참조하고 있는 오브젝트가 이름을 바꾸거나 이동할 경우 객체를 사용하는 SQL문을 모두 다시 고치는 것이 아니라 Synonym만 다시 정의하면 되기 때문에 매우 편리 합니다.

 

3) 객체의 긴 이름을 사용하기 편한 짧은 이름으로 해서 SQL코딩을 단순화 시킬 수 있습니다.

 

4) 또한 객체를 참조하는 사용자의 오브젝트를 감출 수 있기 때문에 이에 대한 보안을 유지할 수 있습니다. Synonym을 사용하는 유저는 참조하고 있는 객체에 대한 사용자의 오브젝트의 소유자, 이름, 서버이름을 모르고 Synonym 이름만 알아도 사용할 수 있습니다.

 

                                                                                                                                      

** Synonyms를 사용하는 경우 **

 

- 오브젝트의 실제 이름과 소유자 그리고 위치를 감춤으로써 database 보안을 개선하는데 사용 됩니다.

- object에의 Public Access를 제공 합니다.

- Remote Database의 Table, View, Program Init를 위해 투명성을 제공 합니다.

- Database 사용자를 위해 SQL문을 단순화 할 수 있습니다.

 

Synonym에는 두가지 종류가 있습니다.

1) Private Synonym

 - 전용 Synonym은 특정 사용자만 이용할 수 있습니다.

 

2) Public Synonym

 - 공용 Synonym은 고용 사용자 그룹이며 소유하며 그 Database에 있는 모든 사용자가 공유

 

                                                                                                                                      

** Synonym 생성 문법 **

**[ Syntax ]*************************************************

* CREATE [PUBLIC] SYNONYM synonym_name

* FOR object_name

*************************************************************

 

- Public : 모든 사용자가 접근 가능한 시노님을 생성 합니다.

              Public Synonym의 생성 및 삭제는 DBA만이 할 수 있습니다.

 

                                                                                                                                      

※ scott USER의 emp테이블을 test USER가 사용하는 예제

 

1. 먼저 scott/tiger USER로 접속해서 test USER에게 emp테이블을 조작할 권한을 부여합니다.

 

SQL> GRANT ALL ON emp TO test;

         권한이 부여되었습니다.

 

test user에 대하여 scott의 emp테이블을 조작할 수 있는 권한을 부여 합니다.

권한이 있어야 select하거나 update, insert할 수 있습니다.

 

2. test USER로 접속해 동의어를 생성합니다.

 

SQL> connect test/test

 

SQL> CREATE SYNONYM scott_emp FOR scott.emp;

시노님이 생성되었습니다.

 

scott USER가 소유하고 있는 emp테이블에 대해 scott_emp라는 일반시노님을 생성 했습니다.

scott 사용자의 emp테이블을 test사용자가 scott_emp라는 동의어로 사용 합니다.

 

-- 시노님을 이용한 쿼리

SQL> SELECT empno, ename FROM scott_emp;

 

-- 일반 테이블을 쿼리

SQL> SELECT empno, ename FROM scott.emp;

이 두쿼리의 결과는 같습니다.

 

   EMPNO ENAME
-------- ---------
    7369 SMITH
    7499 ALLEN
    7521 WARD
    7566 JONES
    7654 MARTIN
    7698 BLAKE
          15 개의 행이 선택되었습니다.

                                                                                                                                      

** 동의어 삭제 **

 

SQL> DROP SYNONYM scott_emp;

시노님이 삭제 되었습니다.

 

SQL> SELECT empno, ename FROM scott_emp;

라인 1에 오류:

ORA - 00942 : 테이블 또는 뷰가 존재하지 않습니다.

 

                                                                                                                                      

 

 

 
  ================================================
    * Oracle Community OracleClub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ empal.com)
  ================================================
※ 강좌를 다른 홈페이지에 기재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

2009. 4. 15. 14:56

[Oracle] 오라클 객체(2) [VIEW 테이블]

** 뷰란? **

 

- 뷰는 하나의 가상 테이블이라 생각 하시면 됩니다.

- 뷰는 실제 데이터가 저장 되는 것은 아니지만 뷰를 통해 데이터를 관리 할 수 있습니다.

- 뷰는 복잡한 query를 통해 얻을 수 있는 결과를 간단한 query를 써서 구할 수 있게 합니다.

- 한개의 뷰로 여러 테이블에 대한 데이터를 검색할 수 있습니다.

- 특정 평가기준에 따른 사용자 별로 다른 데이터를 액세스 할 수 있도록 합니다.

 

                                                                                                                                  

** 뷰의 제한 조건 **

 

- 테이블에 NOT NULL로 만든 컬럼들이. 뷰에 다 포함이 되 있어야 됩니다.

- 그리고 ROWID, ROWNUM, NEXTVAL, CURRVAL 등과 같은 가상컬럼에 대한 참조를 포함하고 있는 뷰에는 어떤 데이터도 Insert할 수 없습니다.

- WITH READ ONLY 옵션을 설정한 뷰도 데이터를 갱신할 수 없습니다.

- WITH CHECK OPTION을 설정한 뷰는 뷰의 조건에 해당되는 데이터만 삽입, 삭제, 수정을 할 수 있습니다.

 

                                                                                                                                  

**[ Syntax ]*******************************************************************

* CREATE[OR REPLACE] [FORCE|NOFORCE] VIEW view_name

* AS subquery

* [WITH CHECK OPTION [CONSTRAINT 제약조건]]

* [WITH READ ONLY]

*******************************************************************************

 

- FORCE : 기본 테이블 유무에 관계없이 VIEW를 생성

 

- WITH CHECK OPTION : VIEW에 의해 엑세스될 수 있는 행만이 입력되거나 변경될 수 있음을 지정 합니다.

 

- WITH READ ONLY : SELECT만 가능한 VIEW의 생성

 

- VIEW를 정의 하는 질의어에는 ORDER BY절을 사용할 수 없습니다.

 

- 함수를 사용한 컬럼은 반드시 ALIAS를 지정해야 합니다.

 

SQL> CREATE OR REPLACE VIEW Name_Query

          AS SELECT a.ename, b.dname

               FROM emp a, dept b

               WHERE a.deptno = b.deptno

                    AND b.deptno = 20

 

view created

 

이렇게 뷰를 생성해 놓고 뷰를 통해 검색을 하면 됩니다.

 

SQL> SELECT * FROM Name_Query;

 

ENAME                DNAME
-------------------- ----------
SMITH                RESEARCH
JONES                RESEARCH
SCOTT               RESEARCH
ADAMS               RESEARCH
FORD                 RESEARCH

 

                                                                                                                                  

** WITH CHECK OPTION **

 

view의 조건식을 만족하는 데이터만 INSERT 또는 UPDATE가 가능하도록 하는 옵션 입니다.

 

SQL> CREATE OR REPLACE VIEW Check_Option

          AS SELECT empno, ename, deptno

               FROM emp

               WHERE deptno = 10

          WITH CHECK OPTION

 

view create

 

SQL> INSERT INTO Check_Option(empno, ename, deptno)

          VALUES (10005, 'jain', 30);

 

INSERT INTO Check_Option(empno, ename, deptno)
            *
1행에 오류:
ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다
부서 번호가 10인 사원만 INSERT, UPDATE할 수 있습니다.

                                                                                                                                  

** WITH READ ONLY **

 

SELECT만 가능한 VIEW를 생성합니다.

 

SQL> CREATE OR REPLACE VIEW Read_Only

          AS SELECT empno, ename, deptno

               FROM emp

               WHERE deptno = 10

          WITH READ ONLY

 

view created.

 

단순히 읽기만 할수 있고 데이터는 입력하지 못합니다.

 

                                                                                                                                  

** VIEW에 대한 DML문 사용 규칙 **

- VIEW가 다음 사항을 포함하는 경우 행의 삭제 불가

 -> JOIN조건, 그룹함수, GOUP BY절, DISTINCT명령

 

- VIEW가 다음 사항을 포함하는 경우 데이터 수정 불가

 -> JOIN조건, 그룹함수, GROUP BY절, DISTINCT명령, 식으로 정의된 컬럼(EX SAL * 0.1)

 

- VIEW가 다음 사항을 포함하는 경우 데이터 추가 불가

 -> JOIN조건, 그룹함수, GROUP BY절, DISTINCT명령, 식으로 정의된 컬럼, VIEW에 선택되지 않는 NOT NULL컬럼

 

                                                                                                                                  

** 뷰의 정보 조회 **

 

USER_VIEWS 데이터 사전을 통해서 뷰에 대한 정보를 조회 할 수 있습니다.

 

SQL> SELECT view_name, text

          FROM USER_VIEWS;

 

                                                                                                                                  

** 뷰의 삭제 **

 

SQL> DROP VIEW Read_Only;

 

view dropped.

 

                                                                                                                                  

  

 

  ================================================
    * Oracle Community OracleClub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ empal.com)
  ================================================
※ 강좌를 다른 홈페이지에 기재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

2009. 4. 15. 14:55

[Oracle] 오라클 객체(1) [인덱스(Index)]

인덱스는 테이블이나 클러스트에서 쓰여지는 선택적인 객체로서, 오라클 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조 입니다.

 

자동 인덱스 : 프라이머리 키 또는 unique 제한 규칙에 의해 자동적으로 생성되는 인덱스 입니다.

 

수동 인덱스 : CREATE INDEX 명령을 실행해서 만드는 인덱스들 입니다.

 

※ Index를 생성하는 것이 좋은 Column

- WHERE절이나 join조건 안에서 자주 사용되는 컬럼

- null값이 많이 포함되어 있는 컬럼

- WHERE절이나 join조건에서 자주 사용되는 두 개이상의 컬럼들

 

※ 다음과 같은 경우에는 index 생성이 불필요 합니다.

- table이 작을 때

- 테이블이 자주 갱신될 때

 

※ 오라클 인덱스는 B-tree(binary search tree)에 대한 원리를 기반으로 하고 있습니다.

 

B-tree인덱스는 컬럼안에 독특한 데이터가 많을 때 가장 좋은 효과를 냅니다.

 

이 알고리즘 원리는

 

- 주어진 값을 리스트이 중간점에 있는 값과 비교합니다.

  만약 그 값이 더 크면 리스트의 아래쪽 반을 버립니다.

  만약 그 값이 더 작다면 위쪽 반을 버립ㄴ디ㅏ.

 

- 하나의 값이 발견될 때 까지 또는 리스트가 끝날 때까지 그와 같은 작업을 다른 반쪽에도 반복합니다.

 

                                                                                                                                  

※ 인덱스는 B-tree 구조를 가지며 크게 다음 네 가지로 분류될 수 있습니다.

 

1) Bitmap 인덱스

 

- 비트맵 인덱스는 각 컬럼에 대해 적은 개수의 독특한 값이 있을 경우에 가장 잘 작동합니다. 그러므로 비트맵 인덱스는 B-tree 인덱스가 사용되지 않을 경우에서 성능을 향상 시킵니다. 테이블이 매우 크거나 수정/변경이 잘 일어나지 않는 경우에 사용할수 있습니다.

 

SQL> CREATE BITMAP INDEX emp_deptno_indx

          ON emp(deptno);

 

 

2) Unique 인덱스

 

- Unique 인덱스는 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있는 장점이 있습니다. 프라이머리키와 Unique 제약 조건시 생성되는 인덱스는 Unique 인덱스 입니다.

 

SQL> CREATE UNIQUE INDEX emp_ename_indx

          ON emp(ename);

 

3) Non-Unique 인덱스

 

- Non-Unique 인덱스는 인덱스를 사용한 컬럼에 중복 데이터 값을 가질수 있습니다.

 

SQL> CREATE INDEX dept_dname_indx

          ON dept(dname);

 

4) 결합(Concatenated(=Composite)) 인덱스

 

- 복수개의 컬럼에 생성할 수 있으며 복수키 인덱스가 가질수 있는 최대 컬럼값은 16개 입니다.

 

SQL> CREATE UNIQUE INDEX emp_empno_ename_indx

          ON emp(empno, ename);

 

                                                                                                                                  

** 인덱스의 삭제 **

 

- 인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는 테이블의 데이터에는 아무런 영향도 미치지 않습니다.

 

- 인덱스를 삭제하려면 INDEX의 소유자이거나 DROP ANY INDEX권한을 가지고 있어야 합니다.

 

- INDEX는 ALTER를 할 수 없습니다.

 

SQL> DROP INDEX emp_empno_ename_indx;

 

                                                                                                                                  

※ 인덱스에 대한 정보는 USER_INDEXS 뷰 또는 USER_IND_COLUMNS 뷰를 통해 검색할 수 있습니다.

 

SQL> SELECT index_name, index_type

          FROM USER_INDEXS

          WHERE table_name = 'EMP';

 

INDEX_NAME                        INDEX_TYPE
---------------------------     -----------
EMP_DEPTNO_INDX                BITMAP
EMP_PK_EMPNO                    NORMAL

 

                                                                                                                                  

 


  ================================================
    * Oracle Community OracleClub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ empal.com)
  ================================================
※ 강좌를 다른 홈페이지에 기재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

2009. 4. 14. 10:21

[Oracle] PL/SQL에서 엔터(enter)키 역할 사용하는 방법

Chr(13) : 캐리지 리턴(carriage return)

Chr(10) : 라인피드(new line)


Chr(13)은 동일한 줄의 첫번째 자리에 커서를 위치 (캐리지 리턴)

Chr(10)은 현재 커서가 위치한 곳에서 아래로 한줄 내리는 기능 (라인피드)

 

 

예제) replace(text,'\n', chr(13)||chr(10)) -> text에서 \n을 보면 엔터키로 역할 변경


2009. 4. 14. 10:17

[Oracle] 테이블 복사

SELECT한 내용을 INSERT 하기

 

INSERT INTO CODELIBRARY3 (ID,TYPE,PARENT_ID,NAME,USE_YN,DEL_YN,FLAG) 
SELECT * FROM CODELIBRARY T1

 

테이블 복사

 

COPY FROM scott/tiger@oracle CREATE emp2 USING select * FROM emp;


CREATE TABLE emp2    AS    SELECT * FROM scott.emp;


2008. 10. 21. 16:29

[Oracle] 함수 모음

Oracle 내장함수 중 유용한 몇몇에 대해 알아본다.

-- 숫자 함수 (Number Function)
ABS(n) : 절대값을 계산하는 함수
   SQL> SELECT ABS(-10) FROM DUAL;      // 결과는 10
CEIL(n) : 주어진 값보다 큰 최소 정수값을 구하는 함수
   SQL> SELECT CEIL(5.1) FROM DUAL;      // 결과는 6
   SQL> SELECT CEIL(-5.1) FROM DUAL;      // 결과는 -5
FLOOR(n) : 주어진 값보다 작거나 같은 최대 정수값을 구하는 함수
   SQL> SELECT FLOOR(5.1) FROM DUAL;      // 결과는 5
   SQL> SELECT FLOOR(-5.1) FROM DUAL;     // 결과는 -6
EXP(n) : 주어진 값의 e의 승수를 구하는 함수
LN(n) : 주어진 값의 자연로그 값을 구하는 함수
MOD(m, n) : m을 n으로 나우어 남은 값을 반환한다.
   SQL> SELECT MOD(5, 3) FROM DUAL;      // 결과는 2
   SQL> SELECT MOD(5, 0) FROM DUAL;      // 결과는 5
POWER(m, n) : m의 n승 값을 구하는 함수
   SQL> SELECT POWER(2, 3) FROM DUAL;      // 결과는 8
ROUND(m, n) : m 값의 반올림을 구하는 함수. n은 소숫점 자릿수를 명시
   SQL> SELECT ROUND(111.126, 1) FROM DUAL;      // 결과는 111.1
   SQL> SELECT ROUND(111.126, -1) FROM DUAL;      // 결과는 110
SIGN(n) : n 값의 부호를 구하는 함수. n > 0일때는 1, n = 0일때는 0, n < 0 일때는 -1
SQRT(n) : n 값의 루트값을 구하는 함수. n은 양수이어야 한다.
TRUNC(n, m) : n 값을 m 소숫점 자리로 반내림한 값을 구하는 함수
   SQL> SELECT TRUNC(10.678, 2) FROM DUAL;      // 결과는 10.67
   SQL> SELECT TRUNC(567.345, -2) FROM DUAL;      // 결과는 500

-- 문자 함수 (String Function)
CONCAT(str1, str2) : 두 문자를 합치는 함수. "||" 연산자와 같은 역할을 합니다.
   SQL> SELECT CONCAT('Oracle', ' Korea') NAME FROM DUAL;      // 결과는 Oracle Korea
INITCAP(str) : 주어진 문자열의 첫 번째 문자를 대문자로 변환시켜 주는 함수
   SQL> SELECT INITCAP('junducki') FROM DUAL;      // 결과는 Junducki
LOWER(str) : 문자열을 소문자로 변환시켜주는 함수
   SQL> SELECT LOWER('JUNDUCKI') FROM DUAL;      // 결과는 junducki
UPPER(str) : 문자열을 대문자로 변환시켜주는 함수
   SQL> SELECT UPPER('junducki') FROM DUAL;      // 결과는 JUNDUCKI
LPAD(str1 , n, str2) : str1 문자열의 왼쪽에 str2 문자열을 str1의 문자열 길이가 n이 되게 채워주는 함수. str1의 문자열이 n보다 클 경우 str1을 n개 문자열 만큼 반환합니다.
   SQL> SELECT LPAD('jin', 5, '-') FROM DUAL;      // 결과는 --jin
RPAD(str , n, char2) : LPAD와 반대로 오른쪽을 채워주는 함수
   SQL> SELECT RPAD('jin', 5, '-') FROM DUAL;      // 결과는 jin--
SUBSTR(str, m, n) : str 문자열의 m 번째 자리부터 n개의 문자열을 구하는 함수
   SQL> SELECT SUBSTR('junducki', 3, 3) FROM DUAL;      // 결과는 ndu
   SQL> SELECT SUBSTR('junducki', -3, 3) FROM DUAL;      // 결과는 cki
LENGTH(str) : str 문자열의 길이를 구하는 함수
   SQL> SELECT LENGTH('junducki') FROM DUAL;      // 결과는 8
REPLACE(str1, str2, str3) : str1 문자열에서 str2과 매칭되는 부분을 str3으로 변환하는 함수. 대소문자를 구분함
   SQL> SELECT REPLACE('Ukzang ukzang', 'U', 'j') FROM DUAL;      // 결과는 jkzang ukzang
INSTR(str1, str2, m, n) : str1 문자열에 str2가 매칭되는 위치를 구하는 함수. m은 str1 문자열의 m 위치에서 부터 검색. n은 매칭되는 횟수를 지정. 매칭되는 것이 없을 때는 0
   SQL> SELECTINSTR('junducki junducki', 'u') FROM DUAL;      // 결과는 2
SQL> SELECT INSTR('junducki junducki', 'u', 3) FROM DUAL;      // 결과는 5
   SQL> SELECT INSTR('junducki junducki', 'u', 3, 2) FROM DUAL;      // 결과는 11
TRIM(str1, str2) : str1 문자열의 양끝의 str2 문자열을 제거하는 함수, str2를 주지 않으면 [공백]을 제거한다.
LTRIM(str1, str2) : TRIM을 왼쪽 끝만 적용
RTRIM(str1, str2) : TRIM을 오른쪽 끝만 적용
VSIZE(str) : str 문자열의 Byte 수를 구하는 함수. NULL이면 NULL이 반환
   SQL> SELECT VSIZe('junducki') FROM DUAL;      // 결과는 8

-- 날짜 함수 (Date Function)
LAST_DAY(d) : 달의 마지막 날을 구하는 함수
   SQL> SELECT LAST_DAY(SYSDATE) FROM DUAL;      // 결과 31-03-2008
ADD_MONTH(m, n) : m의 날짜에 n 달을 더해주는 함수
   SQL> SELECT ADD_MONTH(SYSDATE, 2) FROM DUAL;      // 결과 24-05-2008
MONTH_BETWEEN(m, n) : m 날짜와 n 날짜 사이의 달수를 구하는 함수
   SQL> SELECT MONTHS_BETWEEN(TO_DATE('2008/06/05') , TO_DATE('2008/09/23')) FROM DUAL;     
         // 결과는 -3.880635
ROUND(d, [f]) : d 날짜를 f로 지정한 단위로 반올림을 구하는 함수
   SQL> SELECT ROUND(TO_DATE('2008/08/11'), 'YEAR') FROM DUAL;      // 결과는 2009-01-01
   SQL> SELECT ROUND(TO_DATE('2008/08/11'), 'MONTH') FROM DUAL;      // 결과는 2008-08-01
   SQL> SELECT ROUND(TO_DATE('2008/08/11'), 'DAY') FROM DUAL;      // 결과는 2008-08-11
날짜에 대한 산술 연산
   날짜 + 숫자 : 결과는 날짜. 날짜부터 숫자만큼의 날수가 지난 날짜
   날짜 - 숫자 : 결과는 날짜. 날짜부터 숫자만큼의 날수가 전인 날짜
   날짜 - 날짜 : 결과는 숫자. 두 날짜의 차이

-- 변환 함수 (Convert Function)
TO_CHAR : DATE형, NUMBER형을 VARCHAR2형으로 변환해주는 함수
   SQL> SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') FROM DUAL;      // 결과는 2008/03/28
TO_DATE : CHAR형, VARCHAR2형을 DATE형으로 변환해주는 함수
   SQL> SELECT TO_DATE('2008/03/28', 'YYYY/MM/DD') FROM DUAL;      // 결과는 2008/03/28
TO_NUMBER : CHAR형, VARCHAR2형을 숫자형으로 변환해주는 함수
   SQL> SELECT TO_NUMBER('12327') FROM DUAL;      // 결과는 12327

-- 기타 함수 (Etc Function)
NVL : NULL 값을 다른 값으로 변환해주는 함수. 모든 데이터 타입에 사용가능.
   SQL> SELECT empno, NVL(comm, 0) FROM emp;
   EMPNO             NVL(COMM, 0)
   ----------------------------------------------
   7499                  300
   7521                  0
DECODE(value, if1, then1, if2, then2, ...) : 데이터들을 다른 값으로 변환해주는 함수. value 값이 if1일 경우 then1으로, if2일 경우 then2로 ...
   SQL> SELECT deptno, DECODE(deptno, 10, 'AAA', 20, 'BBB', 30, 'CCC') FROM emp;
   DEPTNO           DECODE(DEPT
   ------------------------------------------------
   10                       AAA
   30                      CCC
   20                      BBB
GREATEST(n1, n2, ...) : 값 중 최대값을 구하는 함수
   SQL> SELECT GREATEST(10, -5, 16, 20, -11) FROM DUAL;      // 결과는 20
LEAST(n1, n2, ...) : 값 중 최소값을 구하는 함수
   SQL> SELECT LEAST(10, -5, 16, 20, -11) FROM DUAL;      // 결과는 -11 


 

'Database / Sql' 카테고리의 다른 글

[Oracle] 통계 함수  (0) 2008.10.21
[Oracle] 오라클 관련 함수들과 정보들  (0) 2008.10.21
SQL의 종류  (0) 2008.10.08
[Oracle] sid 확인  (0) 2008.10.08
[Oracle] 오라클이란?  (0) 2008.10.08
2008. 10. 8. 17:14

[Oracle] 오라클이란?

 Oracle Corporation이란 미국의 기업에서 만든 데이터 베이스 관리 시스템  입니다.

Oracle 은 Database 에서 가장 많이 쓰이며, 기능 또한 가장 좋은 것으로 알려진 최고의 Database 입니다.

Oracle 을 잘 다룬다고 하면 Database 에 대해서 전문적인 지식을 가지고 있다고 할 만큼

Database = Oracle 라는 인식이 저변에 확대되어 있는 것이 사실입니다.

Microsoft 사의 MS-SQL 버전이 높아지면서 많은 향상된 기능들과 편리한 기능들 그리고 Microsoft 의 OS와 접목된 최적화된 설계로 Oracle 의 시장을 넘보고 있지만 아직까지  Oracle 은 Database 분야에서 선두의 자리를 고수하고 있습니다.

Database 라는 것이 이제는 몰라서는 안 되는 IT 기술의 하나로 되고,  또한 Database 라는 곳이 쓰이는 곳이 많다 보니, DBA 의 중요성은 날로 높아진다고 할 수 있습니다.

이와 함께 많은 사람들이 관심을 갖게된 Oracle의 자격증이 OCP-DBA 자격증입니다.

Database 와 같은 경우는 처음에 공부하기가 조금은 힘든 분야입니다.

용어도 생소하고, 또한 개념 이해도 힘들기 때문에, 처음에 많은 시간을 투자하셔서 공부를 해야 후에 다른 어떤 Database 를 접하게 되어도 접근이 빠릅니다.

사실, Oracle 은 Database 가 복잡하고 많은 기능들이 있다 보니,

처음에 접근하기 힘든 것이 사실입니다만 Oracle DB 를 이해하고 난 다음에

다른 DB 를 공부하는 것은 그만큼 쉬운 것이 사실입니다.

공부를 하시면서 가장 유의할 점은 이해 위주의 공부를 하시라는 것입니다.  

Oracle(오라클)

미국 오라클사의 관계 데이터베이스 관리 시스템(RDBMS)의 이름으로.

유닉스 환경에서 사용되는 RDBMS로는 현재 가장 널리 사용되는 대표적인 제품의 하나이다.

검색·갱신용 언어로는 국제 표준화 기구(ISO)에서 표준화한 구조화 조회 언어(SQL)가 표준이 되어 있다.  최신 현행판은 오라클 9i 입니다..

Oracle Corporation == 2000년 6월 기준 ==

1977년 로렌스 J. 엘리슨(Lawrence J. Ellison)이 설립하였다.

본사는 미국 캘리포니아주 레드우드 오라클 파크웨이에 있다.

오라클(Oracle)이란 회사명은 고대 그리스어의 ‘신탁(神託)’에서 유래하였다.

2000년 2월 현재, 97억 달러의 수익을 올려 마이크로소프트(MS)에 이어 세계 제2위 규모의 독립적

소프트웨어 기업으로 성장하였다. 전세계 145개국에 지사가 있으며, 종업원수는 총 4만 3,000명이다.

오라클의 초고속 성장배경에는 인터넷의 무한한 가능성을 예견한 엘리슨 회장의 경영전략이 있다.

그는 인터넷에 오라클의 데이터베이스를 접목시켜, 부담스러운 저장장치 없이도 중앙처리장치(CPU)와 적은 양의 메모리만으로 운영할 수 있는 네트워크 컴퓨터(NC)를 창안함으로써 성장의 발판을 마련하였다.

그 후 오라클은 포스트 PC 시대에 대비한 제품을 잇따라 개발하였다.

마이크로소프트(MS)가 PC 기반에서 절대적인 영향력을 발휘하는 윈도우 운영체계를 만들었다면,

오라클은 인터넷 서버를 통해 정보를 공유하는 포스트 PC 시대에 핵심 기술로 부상한 데이터베이스

분야에서 독보적인 위치를 확보하였다.

오라클의 성장은 인터넷 전자상거래와 깊은 연관이 있다. 1999년 응용프로그램 판매를 통해 4억 4,700만 달러의 매출을 기록했고, 컨설팅과 서비스 수익으로 15억 달러의 수익을 올렸다.

2000년 6월 현재, 기업용 데이터베이스(DB) 분야에서 세계 시장의 절반 이상을 장악하고 있다.

'Database / Sql' 카테고리의 다른 글

[Oracle] 통계 함수  (0) 2008.10.21
[Oracle] 오라클 관련 함수들과 정보들  (0) 2008.10.21
[Oracle] 함수 모음  (0) 2008.10.21
SQL의 종류  (0) 2008.10.08
[Oracle] sid 확인  (0) 2008.10.08