2011년 6월 28일 화요일

[Oracle.4]SQL Functions

SQL Functions
보다 효율적이고 알아보기 쉬운 SQL문을 작성하기 위하여.
1. Single-Row Functions
어떤 테이블에 10개의 Row가 있고 질의문에 조건이 없다면, 10개의 Row 모두에 단일 행 함수가 적용되어 변환된 결과를 반환한다. , 단일 행 함수는 행마다 적용 된다.
1) Number Functions
숫자 데이터 타입의 값을 조작하여 변화된 숫자 값을 반환하는 함수.
1-1) MOD : MOD( m, n )
m n으로 나누었을 때 나머지를 반환 한다.
1-2) ROUND : ROUND( m, n )
m을 소수점 n+1 자리에서 반올림한 결과를 반환 한다.
1-3) WIDTH_BUCKET : WIDTH_BUCKET( expr, min_value, max_value, num_buckets )
어떤 값의 최소에서부터 최대값을 설정하고 bucket을 지정하여 임의의 값이 지정된 범위 내에서 어느 위치에 있는지를 반환 한다.
2) Character Functions
문자 데이터 타입의 값을 조작하여 문자 값을 반환 하는 함수.
2-1) LOWER, UPPER : LOWER( char ), UPPER( char )
입력된 문자 값을 소문자, 대문자로 변환 한다.
2-2) SUBSTR : SUBSTR( string, position, substriong_length )
문자열에서 일부 문자값을 선택적으로 반환 한다.
3) Datetime FunctionsDATE로 지정된 데이터 타입의 값에 적용 하는 함수.
3-1) SYSDATE : SYSDATE
시스템의 설정된 날짜 값을 반환 한다.
3-2) ADD_MONTH : ADD_MONTHS( date, integer )
지정한 날짜 중 해당 월에 정수를 더한 값을 반환 한다.
3-3) LAST_DAY : LAST_DAY( date )
해당하는 월의 마지막 일을 반환 한다.
3-4) MONTHS_BETWEEN : MONTHS_BETWEEN( date1, date2 )
날짜와 날짜 사이의 기간을 월로 나타냅니다.
4) Conversion Functions
4-1) TO_CHAR ( datetime ) : TO_CHAR( datetime, ‘format’ )
DATE 관련 데이터 타입을 VARCHAR2 데이터 타입으로 변환 한다.
SQL > SELECT TO_CHAR( SYSDATE, ‘YYYY-MM-DD HH24:MI:SS’ ) “sysdate”
      FROM dual;
Result > 2011-06-28 11:22:10
FORMAT
D : 요일 번호 (1-7)         DAY : 요일명                DD :  (1-31)               DY : 요일명 약자
HH :  (1-12)               HH24 :  (0-23)            MI :  (0-59)               MM :  (1-12)
MON : 월 이름 약자       MONTH : 월 이름          SS :  (0-59)                YEAR : 년도
YYYY : 4자리 년도
4-2) TO_CHAR ( number ) : TO_CHAR( number, ‘format’ )
NUMBER 타입을 VARCHAR2 데이터 타입으로 변환 한다.
SQL > SELECT TO_CHAR( 20000, ‘$999,999’) “money”
      FROM dual;
Result > $20,000
FORMAT ( 123.45 를 기준 ) : L은 화폐단위, S는 양수나 음수를 표시
999.999 : 123.450                      9999 : 123                   $999.99 : $123.45
L999.99 : \123.45                     S99.999 : +123.45           999,999 : 12,345
5) Miscellaneous Single-Row Functions
5-1) DECODE : DECODE( expr, search, result, default )
expr과 각 search값을 비교하여 같으면 result값을 반환 하고 같지 않다면 default 값을 반환 한다.
SQL > SELECT job_id,
                DECODE(job_id, ‘SA_MAN’, ‘Sales Dept’, ‘SA_REP’, ‘Sales Dept’, ‘Another’) “decode”
      FROM jobs WHERE job_id LIKE ‘S%’;
설명 > job_id S로 시작하는 것 중에서 ‘SA_MAN’ ‘SA_REP’인 경우 ‘Sales Dept’로 표현하고,
      그 이외는 ‘Another’로 나타낸다.
5-2) NVL : NVL( expr1, expr2 )
expr1 NULL값인 경우 expr2의 값을 반환 한다.
2. Aggregate Functions
하나 이상의 행으로부터 하나의 결과를 반환한다.
1) AVG
1-1) AVG( expr )
하나 이상의 값들로부터 평균값을 반환 한다.
1-2) AVG( expr ) OVER( analytical_clause )
분석 함수로 사용된 예.
2) RANK
2-1) RANK( expr ) WITHIN GROUP( ORDER BY expr )
전체 값을 대상으로 각 값의 순위를 반환 한다.
2-2) RANK( ) OVER ( query_partition_clause order_by_clause )
특정 순위가 아닌 전체 순위에 대해 하나하나 알고 싶을 때 사용.
3) SUM, MIN, MAX, COUNT
합계, 최대, 최소, 전체 행의 수를 반환 하는 함수.
3. Analytical Functions
행의 집단에 대해 연산이 이루어진다는 점에서 일반 그룹 함수와 유사하다. 그러나 일반 그룹 함수는 하나의 집단에 대해 하나의 결과가 RETURN 되지만 분석용 함수는 하나의 집단에 대해 여러 가지 기준을 적용해서 여러 개의 결과가 RETURN 될 수 있다.
분석용 함수는 하나의 Query에서 ORDER BY 절 직전에 수행된다. , JOIN, WHERE, GROUP BY, HAVING이 처리된 결과에 대해 분석용 함수가 적용되고 마지막으로 ORDER BY가 수행된다.따라서 분석용 함수는 SELECT절이나 ORDER BY절에만 나타날 수 있다.
Analytic-Function ( <Argument>, <Argument>, … )
OVER ( <Query-Partition-clause> <order-By-Clause> <Windowing-Clause> )
1) FIRST_VALUE : FIRST_VALUE( expr ) OVER ( analytic_clause )
정렬된 값들 중 첫 번째 값을 반환 한다.
2) COUNT : COUNT ( expr ) OVER ( analytic_clause )
조건을 만족하는 행의 수를 반환 한다.
3) SUM : SUM ( expr ) OVER ( analytic_clause )
조건에 만족하는 행의 합을 반환 한다.
4) RANK : RANK( ) OVER ( order_by_clause )
값의 그룹에서 값의 순위를 계산 한다.
5) ROW_NUMBER : ROW_NUMBER( ) OVER ( [query_partition_clause] order_by_clause )
ORDER BY 절에서 지정된 행의 순위 순서로 각 행에 고유한 순서를 1부터 할당 한다.
6) DENSE_RANK : DENSE_RANK( ) OVER ( [query_partition_clause] order_by_clause )
값의 그룹에서 값의 순위를 계산한다. RANK와는 달리 같은 순위가 둘 이상 있어도 다음 순위는1만 증가하여 반환 한다.
4. Regular Expression
Regular Expression Oracle 10g에서 새로 도입된 것이다. 기존 함수의 확장한 새로운 함수를 제공하고 있다.
1) REGEXP_LIKE : REGEXP_LIKE ( srcstr, pattern [,match_option] )
LIKE 연산자와 유사하며, 표현식 패턴을 수행하여, 일치하는 값을 반환 한다.
SQL > SELECT product_name
      FROM oe.product_information
      WHERE REGEXP_LIKE ( product_name, ‘SS[^P]’ );
설명 > 제품의 이름중에 ‘SS’다음에 ‘P’를 포함하지 않는 문자열
2) REGEXP_SUBSTR : REGEXP_SUBSTR ( srcstr, pattern [, position [, occurrence [, match_option ] ] ] )
SUBSTR 함수의 기능을 확장. 주어진 문자 열을 대상으로 정규 표현식 패턴을 수행하여, 일치하는 하위 문자열을 반환.
SQL > SELECT cust_email, REGEXP_SUBSTR( cust_email, ‘[^@]+’ ) “REGEXP_SUBSTR”
      FROM oe.customers
      WHERE nls_territory = ‘SWITZERLAND’;
설명 > 이메일에 저장된 문자열에서 ‘@’이 아닐 때까지 읽어 고객의 아이디만을 얻는다.
3)REGEXP_REPLACE
:REGEXP_REPLACE ( srcstr,pattern [,replacestr [,position [,occurrence [,match_option] ] ] ] )
주어진 문자 열을 대상으로 정규 표현식 패턴을 조사하여, 다른 문자로 대체한다.
SQL > SELECT REGEXP_REPLACE(‘Oracle is  the    information company’, ‘( ){2,}’, ‘ ‘ )
      FROM DUAL;
설명 > 문자열에 공백이 일정하지 않은 경우 두 번째 매개변수 위치에 두 문자 이상의 공백이 발생하는 경우의 의미로 ‘{2,}’로 지정하고 있다. 한 문자의 크기로 일정하게 설정 하기 위해 세번째 매개변수에 ‘ ‘와 같이 지정 하였다.

*** 참조 문헌 : 10g로 시작하는 오라클 SQL & PL/SQL - 3장 SQL 함수를 통해 멋진 질의문 만들기

2011년 6월 27일 월요일

[Oracle.3]SQL (Structured Query Language) - 기본 문법

SQL ( Structured Query Language )
1. SELECT
테이블의 데이터를 조회하는 기본적인 SQL 문법
SELECT 칼럼 이름1, 칼럼 이름2
FROM 테이블 이름;
2. WHERE
전체 데이터 중 조건을 만족하는 값만 얻을 수 있도록 한다.
SELECT 칼럼 이름1, 칼럼 이름2
FROM 테이블 이름
WHERE 칼럼이름 조건 값;
1) 기본 문법
SELECT employee_id, hire_date
FROM employees
WHERE last_name = ‘king’;
2) 조건절 작성
AND : A AND B 의 경우 도 조건 모두를 만족 해야 한다.
OR : A OR B 의 경우 두 조건 중 하나를 만족 해야 한다.
BETWEEN AND : 주어진 범위의 값에 해당하면 그 값을 반환 한다.
IN : 하나 이상의 동일 조건을 만족해야 하는 경우
IS NULL/NOT : 할당되지 않은 값을 만족하는 경우
LIKE : 조건의 일부와 일치하는 경우에 적용.
3. ORDER BY
일정한 기준에 의해 정렬하여 표현 할 수 있다.
ORDER BY 칼럼이름 [ASC | DESC]
DESC(Descending) 은 키워드를 명시적으로 ORDER BY 적에서 나타내 주어야 한다.
4. GROUP BY
일반적으로 질의문으로부터 얻은 결과에 대해 GROUP BY 절에 명시한 칼럼의 값이 같을 때 그룹을 만들고, 이 그룹으로부터 SQL 표준 함수인 집합 함수를 통해 다양한 결과를 얻습니다.
GROUP BY 칼럼이름1, 칼럼이름2
5. HAVING
GROUP BY 절의 결과로부터 특정 조건을 만족하는 값을 얻고자 할 때.
GROUP BY 칼럼이름1, 칼럼이름2
HAVING 칼럼이름 조건 값
*** 참조 문헌 : 10g로 시작하는 오라클 SQL & PL/SQL - 2장 데이터 얻기 첫걸음 내딛다

2011년 6월 24일 금요일

[Oracle.2]Oracle Sever Architecture - Oracle Database


Oracle Server Architecture

Oracle은 사용자의 요구를 DBMS에 전달하는 기능을 하는 Instance와 데이터를 저장하고 데이터에 접근하는 대상인 Database로 구성되어 있다.
2. Database
데이터를 저장하는 저장 영역을 말한다. Oracle은 저장 영역인 데이터베이스를 효율적으로 사용하기 위해 논리적 데이터베이스와 물리적 데이터베이스로 구분한다.
1) Logical Database Structure
저장공간을 효율적으로 사용하기 위해 세밀한 설정을 가능하게 한다.
1-1) Data Block
데이터를 저장하는 가장 작은 논리적 단위 이다. Oracle의 데이터 블록은 데이터베이스를 생성할 때 결정된다. 데이터 블록의 크기는 DB_BLOCK_SIZE의 값에 의해 결정되고 데이터베이스가 생성된 이후에는 다시 변경할 수 없다.
1-2) Extent
데이터를 저장하기 위한 연속적인 데이터 블록의 집합이다. 데이터가 할당되는 최소 단위.
사용자가 테이블을 생성하면 이를 저장하기 위해 데이터블록이 할당되고 이때 저장 공간을 연속된 블록들로 할당하게 되는데 처음 할당되는 연속되는 블록들을 Initial Extent라고 한다. 계속된 추가 작업으로 저장 공간이 부족하게 되면 새로운 데이터 블록이 필요하게 되어 다시 연속적인 블록을 할당하게 된다.
1-3) Segment
테이블스페이스를 구성하는 논리적인 저장 단위 이다. 또한 Extent의 집합이다.
Oracle은 데이터를 효율적으로 저장하기 위해 다양한 유형의 Segment를 가진다.
1-3-1) Data Segments
테이블의 데이터를 저장하는 Segment 이다. 가장 빈번하게 I/O가 발생.
1-3-2) Index Segments
테이블 데이터의 Index를 저장하는 Segment 이다.
1-3-3) Rollback Segments
한 개 이상의 Rollback Segment 를 가지고 있다. Rollback Segment 는 변경 이전의 값을 저장하여, 사용자들에게 Read Consistency 를 제공한다. 또한, Transaction ROLLBACK되면 저장하고 있는 이전의 데이터를 제공한다. 자동 언두 관리 (Automatic Undo Management) 변경되기 이전의 언두 데이터를 언두 테이블스페이스에서 관리함으로써, 사용자가 COMMIT하여 이미 데이터베이스에 반영한 데이터도 원래의 값으로 되돌릴 수 있는 Flashback Query 기능이 가능하다.
1-3-4) Temporary Segments
SORT_AREA_SIZE에 할당된 메모리의 크기보다 큰 대용량의 데이터를 정렬할 때 사용하는 작업 공간 이다.
1-4) Tablespace
데이터를 저장하는 가장 큰 개념. 데이터베이스 객체를 생성하거나 생성된 테이블에 데이터를 추가하고 정상적으로 Transaction을 종료하면 테이블 스페이스에 저장된다.
하나의 데이터베이스는 반드시 한 개의 SYSTEM SYSAUX 테이블스페이스를 가지며, SMALLFILE TABLESPACE를 생성한다.
요약)
하나의 테이터베이스는 하나 이상의 테이블스페이스를 가진다. SYSTEM, SYSAUX 테이블스페이스는 데이터베이스가 생성될 때 반드시 존재한다. 데이터베이스 운영에 필수적인 정보들을 가지고 있기 때문이다. 하나의 테이블스페이스는 여러 세그먼트들로 구성된다. 112Kbytes 크기의 세그먼트 내에는 28Kbytes 84Kbytes 크기의 Extent가 존재한다. 그리고 이들 Extent에는2Kbytes 크기의 여러 블록이 존재한다. Block은 데이터를 저장하는 최소단위이며,  BlockOracle은 데이터베이스 객체와 데이터를 저장한다.
2) Physical Database Structure
데이터 베이스 생성시 미리 일정한 크기만큼의 파일을 생성해 두고 이 파일의 크기만큼 데이터를 저장한다.
데이터의 용도에 따라 여러 종류의 파일로 구분된다. 지금부터 하나하나 살펴 보자.
2-1) Data File
테이블, 인덱스 등의 데이터베이스 객체를 물리적으로 저장하는 파일을 말한다. 데이터 파일은 테이블 스페이스 생성시 하나 또는 그 이상 생성되어진다.
2-2) Control File
데이터베이스의 물리적인 구조를 저장해 두는 파일이다. Oracle Instance Data File, Online Redo Log File을 연결하는 역할을 한다.
데이터베이스의 물리적인 구조 정보를 가지고 있어 데이터베이스가 시작될 때나 데이터베이스 복구할 때 항상 참조되는 파일입니다.
2-3) Redo Log File
데이터베이스의 모든 변경 정보를 물리적인 파일 형태로 가지고 있는 파일이다.
리두 로그 파일은 데이터베이스를 복구할 때 꼭 필요한 파일이므로 디스크와 그룹형태로Mirroring  Multiplexed Online Redo Log 형태로 구성하여 운영해야 한다.
2-4) Archive Log File
온라인 리두 로그 파일이 로그 시퀀스 번호대로 저장되어 있는 것을 말한다. , 온라인 리두 로그 파일의 저장 내용을 모두 가지고 있는 파일이라고 생각하면 된다.
아카이브 모드일 때 생성되는 파일로 온라인 리두 로그 파일 중 덮어 쓰게 될 로그 시퀀스를 가진 파일의 이미지를 복사하여, 로그 시퀀스 번호대로 리두 로그 파일을 저장하게 된다.
2-5) Parameter File
Oracle Instance SGA 크기 등 해당 Oracle Instance의 기능과 성격을 기록해 놓은 파일이다. Oracle Instance를 시작할 때 Parameter File을 읽어 Oracle이 필요로 하는 자원을 얻게 된다.
2-6) Alert Trace File
운영중에 백그라운드 프로세스와 데이터베이스 서버가 시스템 내부적인 에러나 시스템 변경 상황, 그리고 사용자가 데이터베이스를 운용할 때의 에러 등을 감지하여 Trace File을 생성하며, Alert File에 기록하게 된다.
어제와 오늘 설명한 Oracle Server Architecture의 전체 구성 모습니다. Instance Database간의 연결 및 사용자가 요구한 SQL문을 메모리 영역과 프로세스, 파일 간 어떻게 상호 처리하는 것에 대해 나와 있다.

1-1. Oracle Server Architecture의 전체 구성 모습

*** 참조 문헌 : 10g로 시작하는 오라클 SQL & PL/SQL

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...