Oracle/기타2009. 11. 11. 09:36

Metadata (meta data, or sometimes metainformation) is "data about data", of any sort in any media. Metadata is text, voice, or image that describes what the audience wants or needs to see or experience. The audience could be a person, group, or software program. Metadata is important because it aids in clarifying and finding the actual data.[1] An item of metadata may describe an individual datum, or content item, or a collection of data including multiple content items and hierarchical levels, such as a database schema. In data processing, metadata provides information about, or documentation of, other data managed within an application or environment. This commonly defines the structure or schema of the primary data.

For example, metadata would document data about data elements or attributes, (name, size, data type, etc) and data about records or data structures (length, fields, columns, etc) and data about data (where it is located, how it is associated, ownership, etc.). Metadata may include descriptive information about the context, quality and condition, or characteristics of the data. It may be recorded with high or low granularity.

출처 : http://en.wikipedia.org/wiki/Metadata



metadata는 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터이다.
쉽게 말해 속성정보이다.
Posted by 자수성가한 부자
Oracle/Admin2009. 11. 10. 22:01

SGA

오라클 서버의 메모리 영역이다.

SGA는 Oracle의 인스턴스에 대한 데이타와 제어 정보를 가지는 공유 메모리 영역의 집합이다.

사용 목적의 따라 오라클 파라미터 파일(init.ora)의 조정으로 SGA의 각 부분의 크기를 
조절 할 수 있다.
(initSID.ora 파일의 large_pool_size=8388608,    shared_pool_size=50331648 이렇게 사이즈가 지정되어 있다)

Oracle9i부터 오라클 서버의 종료 없이 SGA의 구성을 SGA_MAX_SIZE 파라미터 값 범위 내에서만 각각의 
크기를 동적으로 변경 가능하다

Oracle 서버를 동시에 사용하고 있는 사용자는 시스템 글로벌 영역의 데이타를 공유한다.

구성요소로는
   - 공유풀(Shared Pool)
   - 데이터베이스 버퍼캐쉬(Database Buffer Cache)
   - 리두로그버퍼(Redo Log Buffer)
   - 라지풀(Large Pool)
   - 자바풀(Java Pool)
이렇게 5가지가 있다.


공유풀(Shared Pool)
  - Library Cache와 Data Dictionary Cache로 구성
  - 하나의 데이터베이스에 행해지는 모든 SQL문을 처리하기 위해 사용
  - 문장을 실행하기 위해 그 문장과 관련된 실행계획과 구문 분석 정보가 들어있음
  - Shared Pool의 사이즈는 SHARED_POOL_SIZE 파라미터 값으로 결정함.

  Library Cache
    - 가장 최근에 사용된 SQL문장의 명령문과 구문분석 트리, 실행계획 정보를 가지고 있다.
    - Shared SQL과 Shared PL/SQL영역으로 구분되어 있다.
       - Shared SQL 영역 : 
             SQL문장에 대한 실행계획과 파싱트리를 저장하고 공유
             동일한 문장의 다음번에 실행되면 Shared SQL 영역에 저장되어 있는 실행계획과 파싱트리를 그대로 이용하기
             때문에 SQL문장의 처리속도는 향상됨

       - Shared PL/SQL 영역 : 
             가장 최근에 실행한 PL/SQL 문장을 저장하고 공유함
             파싱 및 컴파일 된 프로그램 및 프로시져(함수, 패키지, 트리거)가 저장됨
                                  
  Data Dictionary Cache
     - 테이블, 컬럼, 사용자 이름, 사용 권한 같은 가장 최근에 사용된 데이터 사전의 정보를 저장하고 있음
     - 구문 분석 단계에서 서버 프로세스는 SQL문에 지정된 오브젝트 이름을 찾아내고 접근 권한을 검증하기 위해
        Dictionary Cache의 정보를 찾아봄


데이터베이스 버퍼캐쉬(Database Buffer Cache)
  - 가장 최근에 사용된 데이터 블럭을 저장하는 메모리 공간. 이 버퍼는 아직까지 디스크에 완전히 쓰여지지 않는
     수정된 데이터를 보유할 수도 있음.
  - LRU알고리즘에 의하여 가장 오래전에 사용된 것은 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를
    저장함으로, 디스크 입출력이 줄어 들고, 데이터베이스 시스템의 성능이 증가됨.

    ※ LRU 알고리즘 : 최근에 사용된 블록을 유지하기 위해 오래된 것을 제거하는 알고리즘.


리두로그버퍼(Redo Log Buffer)
  - 데이터베이스에서 일어날 모든 변화를 저장하는 메모리 공간
  - DB에서 발생한 모든 변화는 LGWR에 의해 리두 로그 파일에 저장
  - 데이터베이스의 변경 사항 정보를 유지하는 SGA에 있는 Circular(순환) 버퍼임
  - 리두로그버퍼의 크기는 오라클 파라미터 LOG_BUFFER에서 지정함

자바풀(Java Pool)
  - 자바로 작성된 프로그램을 실행할 때 실행 계획을 저장하는 영역 입니다
  - JAVA_POOL_SIZE 파라미터로 관리되며, 기본 크기 24MB가 할당됨.

라지풀(Large Pool)
  -  Oracle 백업 및 복원 작업에 대한 대용량 메모리 할당, I/O 서버 프로세스 및 다중 스레드 서버와 Oracle XA에
      대한 세션 메모리를 제공하는 SGA의 선택적인 영역
  - LARGE_POOL_SIZE 파라미터로 관리되며, 기본 크기는 0bytes임.


출처 : http://oracleclub.com/oraclelecture.action?lectureType=ADMIN

'Oracle > Admin' 카테고리의 다른 글

Query 실행순서(select)  (0) 2009.11.19
Oracle Architecture  (0) 2009.11.18
isql*plus에서 dba유저 로그인 설정  (0) 2009.11.16
SQL문의 처리 단계  (0) 2009.11.14
리스너에 여러 포트를 사용하고 싶을 때 추가 방법  (0) 2009.10.21
Posted by 자수성가한 부자
Oracle/SQL2009. 11. 9. 11:42

Merge는
Update와 Insert를 합친 것이라고 볼 수 있다. 그래서 때로는 Upsert라고 부르기도 한다.
9i부터 등장

다음과 같이 t1테이블과 t2 테이블이 있다고 가정하자.

select * from t1;


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 80/12/17 800   20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975   20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850   30
7782 CLARK MANAGER 7839 81/06/09 2450   10
7788 SCOTT ANALYST 7566 82/12/09 3000   20

select * from t2;


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 80/12/17 800   20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975   20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850   30
7782 CLARK MANAGER 7839 81/06/09 2450   10
7788 SCOTT ANALYST 7566 82/12/09 3000   20
7839 KING PRESIDENT   81/11/17 5000   10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 83/01/12 1100   20
7900 JAMES CLERK 7698 81/12/03 950   30
7902 FORD ANALYST 7566 81/12/03 3000   20
7934 MILLER CLERK 7782 82/01/23 1300   10
4444         4444    


merge 명령을 실행한다.
t1테이블의 empno와 t2테이블의 empno가 같으면 update를 하고 다를 경우 insert를 하는 것이다.

MERGE INTO t1 a
USING           t2 b                                                   -- 재료가 되는 테이블, 서브 쿼리도 들어올 수 있음.
ON (a.empno = b.empno)
WHEN MATCHED THEN
    UPDATE SET a.sal = b.sal, 
                        a.comm = b.comm
WHEN NOT MATCHED THEN
    INSERT (a.empno, a.ename, a.sal, a.job, a.deptno)
    VALUES (b.empno, b.ename, b.sal, b.job, b.deptno);


결과가 다음과 같이 바뀌었다.

select * from t1;

 

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 80/12/17 900   20
7499 ALLEN SALESMAN 7698 81/02/20 1700 300 30
7521 WARD SALESMAN 7698 81/02/22 1350 500 30
7566 JONES MANAGER 7839 81/04/02 3075   20
7654 MARTIN SALESMAN 7698 81/09/28 1350 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2950   30
7782 CLARK MANAGER 7839 81/06/09 2550   10
7788 SCOTT ANALYST 7566 82/12/09 3100   20
7844 TURNER SALESMAN     1500   30
7839 KING PRESIDENT     5000   10
4444         4444    
7934 MILLER CLERK     1300   10
7902 FORD ANALYST     3000   20
7876 ADAMS CLERK     1100   20
7900 JAMES CLERK     950   30

Posted by 자수성가한 부자
Oracle/기타2009. 11. 9. 11:42
랜덤한 숫자나 문자열을 만들 때 DBMS_RANDOM 패키지를 사용하면 된다



랜덤 넘버 생성

SELECT dbms_random.random 
FROM dual;

RANDOM
1423147536


0~1000 사이의 랜덤 넘버 생성

SELECT dbms_random.value(1,1000) 
FROM dual;

DBMS_RANDOM.VALUE(1,1000)
740.086926


대문자 20자리 랜덤 문자열 생성

SELECT dbms_random.string('U',20)  
FROM dual;

DBMS_RANDOM.STRING('U',20)
LROBZCFXPSBNYZZPBKGC

소문자 20자리 랜덤 문자열 생성

SELECT dbms_random.string('L',20) 
FROM dual;

DBMS_RANDOM.STRING('L',20)
arpahteeuloxnqylxzrk


대소문자가 섞인 20자리 랜덤 문자열 생성

SELECT dbms_random.string('A', 20) 
FROM dual;

DBMS_RANDOM.STRING('A',20)
eHVbFMJyDOkDsVmkWlKo


숫자와 문자가 섞인 20자리 문자열 생성

SELECT dbms_random.string('X', 20) 
FROM dual;

DBMS_RANDOM.STRING('X',20)
KRT4CZYUYO0NJNM4XRYC





Posted by 자수성가한 부자
Oracle/SQL2009. 11. 9. 10:35

오라클 10g부터 분석함수란 것이 등장했다.
랭킹, 누적합 또는 표준편차 등을 구하는 것을 9i까지는 복잡하게 SQL을 가공해서 사용했었는데,
10g부터는 아래의 함수를 사용함으로써 쉽게 구할 수 있게 되었다.
order by 항 이외에는 마지막으로 처리된다.

- 누적합        

SQL> SELECT deptno,  ename,  sal,
        SUM(sal) OVER (PARTITION BY DEPTNO
                                ORDER BY deptno, ename)
        FROM emp;


SQL> select d.loc, d.deptno, e.empno, e.ename, e.sal
         from emp e, dept d
         where e.deptno = d.deptno;

 

SQL> select d.loc, d.deptno, e.empno, e.ename, e.sal,
         sum(sal) over (partition by d.loc
                               order by empno, sal) as running_total
         from emp e, dept d
         where e.deptno = d.deptno;


- Rank 구하기

SQL> SELECT deptno,  ename,  sal,
                      rank() over (order by sal)        as rank,
                     dense_rank() over (order by sal)  as dense_rank,
                     row_number() over (order by sal)  as row_number
         FROM emp;

 

SQL> select *
         from (SELECT deptno,  ename,  sal,
                               rank() over (order by sal)              as rank,
                               dense_rank() over (order by sal)  as dense_rank
                 FROM emp) t
        where rank <= 10;


 

SQL> select *
         from (SELECT deptno,  ename,  sal,
                              rank() over (order by sal)              as rank,
                              dense_rank() over (order by sal)  as dense_rank
                 FROM emp) t
         where dense_rank <= 10;


 

SQL> SELECT deptno,  ename,  sal,
                     rank() over (partition by deptno
                                        order by deptno, sal)       as rank,
                     dense_rank() over (partition by deptno
                                                   order by deptno, sal) as dense_rank,
                     row_number() over (partition by deptno
                                                    order by deptno, sal) as row_number
          FROM emp
          order by deptno, sal;

 


-- 이동 평균

SQL> SELECT deptno "Deptno", ename "Ename", sal "Sal",
                      avg(SAL) OVER (ORDER BY ename) as 누적평균
         FROM emp;

 

SQL> SELECT deptno "Deptno", ename "Ename", sal "Sal",
                      avg(SAL) OVER (ORDER BY ename
                                               rows 2 preceding) as 세개이동평균
          FROM emp;



-- 최고값, 최소값

SQL> SELECT deptno, ename, sal,
                      FIRST_VALUE(ename) OVER (ORDER BY sal ASC) AS MIN_SAL_HAS,
                      FIRST_VALUE(sal)   OVER (ORDER BY sal ASC) AS MIN_SAL,
                      FIRST_VALUE(ename) OVER (ORDER BY sal DESC) AS MAX_SAL_HAS,
                      FIRST_VALUE(sal)   OVER (ORDER BY sal DESC) AS MAX_SAL,
                      LAST_VALUE(sal)    OVER (ORDER BY sal
                                             range between unbounded preceding and unbounded following) as min_sal2
         FROM emp;

   ※ 아래의 의미는 :  나를 기준으로 처음부터 끝까지
    range between unbounded preceding and unbounded following


기타참고사항

SQL*PLUS TIP

SQL> break on deptno skip1                   -- 컬럼과 컬럼 사이에 빈칸을 둠
SQL> break on deptno skip page             -- 부서 번호가 바뀔 경우 페이지로 구분
SQL> clear break                                   -- 설정한 값 해제



참조 :
 - 메뉴얼 : http://download.oracle.com/docs/cd/B19306_01/server.102/b14223/analysis.htm#i1007779
 - 방형욱 강사님 까페 : http://cafe.naver.com/gseducation.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=44

Posted by 자수성가한 부자
Oracle/SQL2009. 11. 9. 09:44


오라클에서 쓰이는 단일행 함수를 정리해 보았다.
단일행 함수를 알고 적재적소에 잘 쓰는 것이 SQL의 실력을 한층 더 높여주는 것이라 했다.
필요할 때 또는 심심할 때 한번씩 읽어봐도 괜찮을 것 같다.

* Numeric Functions

1. ABS 
     : ABS(n)은 n의 절대값을 반환한다.

   - usage : ABS(n)

   - example : SELECT ABS(-37) AS absolute FROM DUAL;

                 ABSOLUTE
               ----------
                       37

2. ACOS
      : ACOS(n)은 n의 역코사인(arc cosine)값을 반환한다. 인수 n은 -1부터 1까지의 범위를 갖는다.

   - usage : ACOS(n)

   - example : SELECT ACOS(.7) AS arc_cosine FROM DUAL;

               ARC_COSINE
               ----------
                .79539883

3. ASIN
      : ASIN(n)은 n의 역사인(arc sine)값을 반환한다. 인수 n은 -1부터 1까지의 범위를 갖는다.

   - usage : ASIN(n)

   - example : SELECT ASIN(.7) AS arc_sine FROM DUAL;

                 ARC_SINE
               ----------
               .775397497
                  
4. ATAN
      : ATAN(n)은 n의 역탄젠트(arc tangent)값을 반환한다. 인수 n은 -1부터 1까지의 범위를 갖는다.

   - usage : ATAN(n)

   - example : SELECT ATAN(.7) AS arc_tangent FROM DUAL;

               ARC_TANGENT
               -----------
                .610725964

5. ATAN2
      : ATAN2(m,n)은 ATAN2(m/n)과 같으며, m/n의 역탄젠트(arc tangent)값을 반환한다.
           인수 n은 범위가 제한이 없다.
 
   - usage : ATAN2(m,n), ATAN2(m/n)

   - example : SELECT ATAN2(.5, .3) AS arc_tangent2 FROM DUAL;

               ARC_TANGENT2
               ------------
                 1.03037683

6. BITAND
     : BITAND(m, n)은 인수 m과 인수 n의 비트에 대한 AND연산을 수행하여 정수를 반환한다.
       m과 n은 음이 아닌 정수로 변환되어, AND 연산을 계산하여 정수를 반환한다.
       이 함수는 일반적으로 DECODE함수와 함께 이용한다. AND연산은 2개의 비트를 비교한다.
       값이 같을 경우에는 1을 반환하고 값이 다를 경우에는 0을 반환한다.
       예를 들어, 정수 5(이진수 101)과 1(이진수 001)의 AND연산은 1(이진수 1)이다.

   - usage : BITAND(m, n)

   - example : SELECT BITAND(5, 1) AS bitand FROM DUAL;

                   BITAND
               ----------
                        1

7. CEIL
     : CEIL은 인수에서 지정한 수를 올림하여 정수를 구하는 함수이다. 음의 수치를 부여하면
       음수측의 가장 가까운 정수를 반환한다.

   - usage : CEIL(n)

   - example : SELECT CEIL(8.6) AS ceiling FROM DUAL;

                  CEILING
               ----------
                        9

8. COS
     : COS은 파라미터 n(라디안으로 표현되는 각도)의 코사인값을 반환한다.

   - usage : COS(n)

   - example : SELECT COS(180 * 3.14159265359/180) AS "cosine of 180" FROM DUAL;

               cosine of 180
               -------------
                          -1

9. COSH
     : COSH은 파라미터 n(라디안으로 표현되는 각도)의 쌍곡 코사인값(hyperbolic cosine)을 반환한다.

   - usage : COSH(n)

   - example : SELECT COSH(0) AS "hyperbolic cosine of 0" FROM DUAL;

               hyperbolic cosine of 0
               ----------------------
                                    1

10. EXP
      : EXP는 e의 n 제곱 값을 반환한다. (e=2.71828183) 이 함수는 인수와 같은 타입의 값을 반환한다.

    - usage : EXP(5)

    - example : SELECT EXP(5) AS "e to the 5th power" FROM DUAL;

               e to the 5th power
               ------------------
                       148.413159

11. FLOOR 
      : FLOOR는 지정한 숫자보다 작거나 같은 정수 중에서 최대값을 반환한다.

    - usage : FLOOR(n)

    - example : SELECT FLOOR(8.6) AS floor FROM DUAL;

                    FLOOR
                ---------
                        8

12. LN
      : LN함수는 입력값의 자연 로그 값을 반환한다. LN은 0보다 큰 값이다.

    - usage : LN(n)

    - example : SELECT LN(37) AS "Natural log of 37" FROM DUAL;

                Natural log of 37
                -----------------
                       3.61091791

13. LOG
      : LOG(m,n)에서 밑을 m으로 한 n의 로그 값을 반환한다. 밑 m은 0 또는 1 이외의 정수값, n은 양수값이다.

    - usage : LOG(m, n)

    - example : SELECT LOG(5, 125) AS "Log base 5 of 125" FROM DUAL;

                Log base 5 of 125
                -----------------
                                3
 
14. MOD
       : MOD는 m을 n으로 나눈 나머지값을 반환한다. n이 0이면, m를 반환한다.
          MOD 공식은 m - n * TRUNC(m/n)이다.
         
    - usage : MOD(m, n)

    - example : SELECT MOD(17, 5) AS modulus FROM DUAL;

                    MODULUS
                -----------
                          2

15. NANVL
       : NANVL는 10g에서 추가된 BINARY_FLOAT, BINARY_DOUBLE과 같은 datatype에만 적용되는 함수이다.
         m의 값이 NaN(Not A Number)일 경우에 n을 반환하고, NaN이 아닐 경우 그냥 m를 반환한다.
         이 함수는 NaN값을 Null으로 매핑하는데 위해 유용하다.

    - usage : NANVL(m, n)

    - example : CREATE TABLE float_point_demo (
             dec_num NUMBER(10,2)
          , bin_double BINARY_DOUBLE
          , bin_float BINARY_FLOAT
           ) 

           INSERT INTO float_point_demo VALUES (1234.56, 1234.56, 1234.56)

         INSERT INTO float_point_demo VALUES (0, 'NaN', 'NaN')

           SELECT * FROM float_point_demo

                DEC_NUM BIN_DOUBLE  BIN_FLOAT
               -------- ---------- ----------
                1234.56 1.235E+003 1.235E+003
                      0        Nan        Nan

                SELECT bin_float, NANVL(bin_float, 0)
             FROM float_point_demo

            BIN_FLOAT NANVL(BIN_FLOAT,0)
               ---------- ------------------
        1.235E+003         1.235E+003
                      Nan                  0

16. POWER
      : POWER는 m의 n승 값을 반환한다. m와 지수 n은 임의의 수이나, m이 음수이면, n은 정수여야 한다.

    - usage : POWER(m, n)

    - example : SELECT POWER(3, 3) AS raised FROM DUAL;

                   RAISED
                ---------
                       27

17. REMAINDER 
      : REMAINDER는 m를 n으로 나눈 나머지를 반환한다. MOD와 유사한데 공식은 m - n * ROUND(m/n)이다.

    - usage : REMAINDER(m, n)

    - example : SELECT MOD (13, 5), REMAINDER(13, 5) AS remainder FROM DUAL;

                   MOD(13,5)     REMAINDER
                ------------  ------------
                           3            -2

18. SIGN
      : SIGN은 파라미터로 주어지는 값의 부호(+, -, 0)에 따라 다음과 같이 반환한다.
           n < 0 일 경우 -1 을 반환
           n = 0 일 경우 0 을 반환
           n > 0 일 경우 1 을 반환

    - usage : SIGN(n)

    - example : SELECT SIGN(-13) AS sign FROM DUAL;

                     SIGN
                ---------
                       -1

19. SIN
      : SIN은 인수 n의 사인(sine)값을 반환한다.(라디안으로 표현되는 각도)
        datatype이 BINARY_FLOAT일 경우, 반환값의 datatype은 BINARY_DOUBLE, 그 외에는 숫자 값을 반환한다.

    - usage : SIN(n)

    - example : SELECT SIN(50 * 3.14159265359/180) AS "sine of 50" FROM DUAL;

                sine of 50
                ----------
                .766044443

20. SINH
       : SINH함수는 인수 n의 쌍곡선 사인(hyperbolic sine)을 반환한다.
         SINH(n)의 값은 (EXP(n) - EXP(-n))/2 의 값과 같다.

    - usage : SINH(n)

    - example : SELECT SINH(2) AS "hyperbolic sine of 2" FROM DUAL;

                hyperbolic sine of 2
                --------------------
                          3.62686041

21. SQRT
       : SQRT는 n의 제곱근을 반환한다. n이 number 타입일 경우에는 n은 음수가 되어서는 안된다.
         BINARY_FLOAT 또는 BINARY_DOUBLE 타입일 경우에는 다음과 같은 값을 반환한다.
           n >= 0 일 경우 양수를 반환
           n = -0 일 경우 -0 을 반환
           n < 0 일 경우 NaN 을 반환

    - usage : SQRT(n)

    - example : SELECT SQRT(7) AS "square root" FROM DUAL;

                square root
                -----------
                 2.64575131

22. TAN
       : TAN은 인수 n의 사인(tangent)값을 반환한다.(라디안으로 표현되는 각도)

    - usage : TAN(n)

    - example : SELECT TAN(105 * 3.14159265359 / 180) AS "tangent of 105" FROM DUAL;

                tangent of 105
                --------------
                    -3.7320508

23. TANH 
       : TANH는 인수 n의 쌍곡선 탄젠트(hyperbolic tangent)을 반환한다.
         TANH(n)의 값은 (EXP(n) - EXP(-n))/(EXP(n) + EXP(-n)) 의 값과 같다.

    - usage : TANH(n)

    - example : SELECT TANH(.7) AS "Hyperbolic tangent of .7" FROM DUAL;

                Hyperbolic tangent of .7
                ------------------------
                              .604367777

* Character Functions Returning Character Values

1. CHR
     : CHR는 해당 DB의 character set 에서 파라미터로 주어지는 10진수 n에 대응하는 아스키코드를 반환한다.

   - usage : CHR(n)

   - example : SELECT CHR(68)||CHR(66) AS oracle FROM DUAL;

               ORACLE
               ------
                   DB

2. NCHR
     : NCHR은 유니코드 문자를 반환한다. 이 함수는 USING NCHAR_CS구문을 가진 CHR과 동등하다.

   - usage : NCHR(n)

   - example : SELECT NCHR(187) AS nchr, CHR(187 USING NCHAR_CS) AS chr FROM DUAL;

               NCHR    CHR
               ----    ---
               >       >

3. NLS_INITCAP 
     : NLS_INITCAP는 각 단어의 처음 문자를 대문자로, 나머지 문자를 소문자로 변환하여 char를 반환한다.
       단어는 공백 또는 영숫자 이외의 문자로 단락을 구분한다.

   - usage : NLS_INITCAP('c', 'nlsparam')

   - example : SELECT NLS_INITCAP ('database') AS initcap FROM DUAL;

                INITCAP
               --------
               Database

4. NLS_LOWER
     : NLS_LOWER는 모든 문자를 소문자로 변환하여 반환한다.
      'nlsparam'은 NLS_INITCAP함수와 같은 형태와 목적을 가질수 있다.

   - usage : NLS_LOWER('c', 'nlsparam')

   - example : SELECT NLS_LOWER('ORACLE''', 'NLS_SORT = XGerman') AS lowercase FROM DUAL;

               LOWERCASE
               ---------
                  oracle

5. NLSSORT
     : NLSSORT는 char 소트에 이용되는 bytes의 문자열을 반환한다.

   - usage : NLSSORT('c', 'nlsparam')

   - example : CREATE TABLE t1 (name VARCHAR2(15));
        INSERT INTO t1 VALUES ('Gaardiner');
        INSERT INTO t1 VALUES ('Gaberd');
        INSERT INTO t1 VALUES ('Gaasten');

               SELECT * FROM t1 ORDER BY name;

               NAME
               ----------
               Gaardiner
               Gaasten
               Gaberd

               SELECT * FROM t1 ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');

               NAME
               ---------------
               Gaberd
               Gaardiner
               Gaasten

6. NLS_UPPER
     : NLS_UPPER는 입력 문자열을 모두 대문자로 변환한 문자열을 반환한다.

   - usage : NLS_UPPER('c', 'nlsparam')

   - example : SELECT NLS_UPPER ('grobe') AS uppercase FROM DUAL;

               UPPERCASE
               ---------
                   GROBE

7. SOUNDEX
     : SOUNDEX는 char의 음성 표현을 가지는 문자열을 반환한다.
       이 함수는 스펠링이 틀려도 발음이 유사한 영단어를 비교할수 있다.

   - usage : SOUNDEX('c')

   - example : SELECT last_name, first_name FROM employees
               WHERE SOUNDEX(last_name) = SOUNDEX('SMYTHE');

               LAST_NAME  FIRST_NAME
               ---------- ----------
                  Smith      Lindsey
                  Smith      William

8. TRANSLATE
     : TRANSLATE는 첫번째 문자열 expr에서 두번째 문자열(from_string) 각각의 문자를 순서대로
       세번째 문자열(to_string)의 대응되는 각각의 문자로 바꿔준다. 즉, 문자단위로 일대일 변환을 해준다.
        from_string은 to_string 보다 더 많은 문자를 가져야 하며, from_string 의 이 여분의 문자들
        (to_string에 대응되는 문자가 없는)이 expr에 있는 경우, 해당 문자를 삭제하는 기능을 한다.

   - usage : TRANSLATE(expr, from_string, to_string)

   - example : SELECT TRANSLATE ('SQL*Plus User''s Guide', ' */''', '___') AS translate FROM DUAL

               TRANSLATE              
               --------------------
               SQL_Plus_Users_Guide

9. ASCII
     : ASCII는 주어진 char의 첫 문자의 아스키 값에 상응하는 10진수값을 반환한다.

   - usage : ASCII('c')

   - example : SELECT ASCII('A') AS ascii FROM DUAL;
 
               ASCII
               -----
                  65

* Datetime Functions

1. CURRENT_DATE
     : CURRENT_DATE는 현재 세션의 날짜 정보를 Date 데이터 형으로 반환한다.

   - usage : CURRENT_DATE

   - example : ALTER SESSION SET TIME_ZONE = '-5:0';
        ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
               SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

               SESSIONTIMEZONE CURRENT_DATE
               --------------- --------------------
               -05:00          08-APR-2009 13:14:03

2. DBTIMEZONE
     : DBTIMEZONE는 데이터 베이스 time zone의 값을 반환한다.

   - usage : DBTIMEZONE

   - example : SELECT DBTIMEZONE FROM DUAL;

        DBTIME
               ------
               +00:00

3. EXTRACT
     : EXTRACT는 특정 날짜,시간 값이나 날짜 값 표현식으로부터 지정된 날짜 영역의 값을 추출하여 반환한다.

   - usage : EXTRACT(t FROM value_expr)

   - example : SELECT EXTRACT(YEAR FROM DATE '2009-03-07') FROM DUAL;

               EXTRACT(YEARFROMDATE'2009-03-07')
               ---------------------------------
                                            2009

4. SESSIONTIMEZONE
     : SESSIONTIMEZONE은 현재 세션의 시간대역(time zone)을 반환한다.

   - usage : SESSIONTIMEZONE

   - example : SELECT SESSIONTIMEZONE FROM DUAL;

               SESSION
               -------
               -08:00

5. SYS_EXTRACT_UTC
     : SYS_EXTRACT_UTC는 time zone offset 또는 time zone region name을 포함한 datetime값으로 부터
       협정 세계시간 UTC (Coordinated Universal Time?formerly Greenwich Mean Time)을 추출한다.

   - usage : SYS_EXTRACT_UTC(datetime)

   - example : SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -08:00') AS utc FROM DUAL;

               UTC
               ---------------------
               28-MAR-00 07.30.00 PM

* General Comparison Functions

1. GREATEST
     : GREATEST는 하나 이상의 인수중에서 가장 큰 값을 반환한다.

   - usage : GREATEST(expr)

   - example : SELECT GREATEST ('HARRY', 'HARRIOT', 'HAROLD') AS greatest FROM DUAL;
 
               GREATEST
               --------
               HARRY

2. LEAST
     : LEAST는 인수 EXPR의 리스트 중에서 가장 작은 값을 반환을 한다.

   - usage : LEAST(expr)

   - example : SELECT GREATEST ('HARRY', 'HARRIOT', 'HAROLD') AS least FROM DUAL;
 
               LEAST
               ------
               HAROLD

* Conversion Functions

1. ASCIISTR
    : ASCIISTR은 주어진 문자열의 아스키 문자열을 반환한다.       

   - usage : ASCIISTR('c')

   - example : SELECT ASCIISTR('ABACDE') AS asciistr FROM DUAL;

               ASCIISTR
               ----------
               AB\00C4CDE

2. BIN_TO_NUM
     : BIN_TO_NUM는 비트(2진수) 벡터를 동등한 수(10진수)로 변환한다.

   - usage : BIN_TO_NUM(expr)

   - example : SELECT BIN_TO_NUM(1,1,0) FROM DUAL;

               BIN_TO_NUM(1,1,0)
               -----------------
                               6

3. CHARTOROWID
     : CHARTOROWID는 CHAR, VARCHAR2, NCHAR, or NVARCHAR2 데이터형태의 값으로부터 ROWID형으로 변환한다.

   - usage : CHARTOROWID('c')

   - example : SELECT last_name FROM employees WHERE ROWID = CHARTOROWID('AAAFd1AAFAAAABSAA/');
 
               LAST_NAME
               -----------
               Greene

* Collection Functions

1. CARDINALITY
    : CARDINALITY는 중첩 테이블(nested table)에서 원소의 수를 반환한다.
                 반환된 형식은 number이고 만약 nested table이 공백이거나 null 집합인 경우 null을 반환한다.

   - usage : CARDINALITY(nested_table)

   - example : SELECT product_id, CARDINALITY(ad_textdocs_ntab) FROM print_media;

               PRODUCT_ID CARDINALITY(AD_TEXTDOCS_NTAB)
               ---------- -----------------------------
                     3060                             3
               2056                             3
               3106                             3
                 2268                             3

2. SET
     : SET은 중첩 테이블에서 중복을 배제하여 반환한다. 반환된 중첩 테이블은 입력된 중첩 테이블과 같은 형태이다.

   - usage : SET(nested_table)

   - example : SELECT customer_id, SET(cust_address_ntab) address FROM customers_demo;

               CUSTOMER_ID ADDRESS(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
               ----------- -------------------------------------------------------------------------------------------------
                    101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
                       102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'))
               103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
               104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
               105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))

* Hierarchical Function

1. SYS_CONNECT_BY_PATH
     : SYS_CONNECT_BY_PATH는 계층적 쿼리에서 유효하다. 이 함수는 루트로부터 node로 열의 값 Path를 반환환다.
                         column 값은 CONNECT BY 조건에 의해 반환되는 각행을 char에 의해 분리된다.

   - usage : SYS_CONNECT_BY_PATH(column, 'c')

   - example : SELECT LPAD(' ', 2*level-1)||SYS_CONNECT_BY_PATH(last_name, '/') AS path FROM employees
               START WITH last_name = 'Kochhar' CONNECT BY PRIOR employee_id = manager_id;

               PATH
               -------------------------------
                /Kochhar
                  /Kochhar/Greenberg
                    /Kochhar/Greenberg/Faviet
         /Kochhar/Greenberg/Chen
           /Kochhar/Greenberg/Sciarra
        /Kochhar/Greenberg/Urman
               /Kochhar/Greenberg/Popp
      /Kochhar/Whalen
                  /Kochhar/Mavris
                  /Kochhar/Baer
                  /Kochhar/Higgins
                    /Kochhar/Higgins/Gietz

* Encoding and Decoding Functions

1. DUMP
    : DUMP는 지정한 데이터의 위치와 길이 등을 지정한 형식으로 반환한다. return_fmt는 반환값의 서식을 지정한다.

   - usage : DUMP(expr, return_fmt, start_position, length)

   - example : SELECT DUMP('abc', 1016) AS dump FROM DUAL;

               DUMP                        
               ------------------------------------------
               Typ=96 Len=3 CharacterSet=WE8DEC: 61,62,63

2. VSIZE
    : VSIZE는 expr의 내부 표현에서 바이트의 수를 반환한다. 만약 expr이 Null이라면, 이 함수는 Null을 반환한다.

   - usage : VSIZE(expr)

   - example : SELECT last_name, VSIZE (last_name) AS bytes FROM employees WHERE department_id = 10;
 
               LAST_NAME            BYTES
               --------------- ----------
               Whalen                   6

* NULL-Related Functions

1. LNNVL
     : LNNVL은 조건식에 주어지는 항의 한쪽 혹은 양쪽에 NULL 값이 나타날 경우에, 조건식을 평가하는 간결한 방법을
       제공한다.
       LNNVL은L where 절에만 사용할 수 있다. LNNVL 함수는 조건식을 파라미터로 가지며 조건식이 FALSE나
       UNKNOWN 일 경우에 TRUE 를 반환하고, 조건식이 TRUE 일 경우에 FALSE 를 반환한다. LNNVL 함수는
       IS [NOT] NULL, AND, OR 조건식을 사용할수 없으나 잠재적으로 NULL 값이 나올 수 있는 상황에서 NULL 값을
       처리하기 위해 사용할 수 있다.  파라미터로 주어지는 조건식에는 AND, OR, BETWEEN 을 포함하는
       다중조건식(compound condition)은 올 수 없다.

   - usage : LNNVL(condition)

   - example : SELECT COUNT (*) FROM emp WHERE LNNVL (comm >= 500)

               COUNT(*)
               --------
                     12

* Environment and Identifier Functions

1. UID
    : UID는 세션 사용자의 유일한 식별하는 정수를 반환한다.(로그인 유저)

   - usage : UID

   - example : SELECT UID FROM DUAL;
                     
                      UID
               ----------
                        0

2. USER
    : USER는 VARCHAR2 형태를 가지는 세션 사용자(로그인 유저)의 이름을 반환한다.

   - usage : USER

   - example : SELECT USER FROM DUAL;
                     
               USER
               ----------
               SYS   

'Oracle > SQL' 카테고리의 다른 글

Merge  (0) 2009.11.09
분석함수(Anaylitic Function)  (0) 2009.11.09
Pairwise comparions VS Nonpairwise comparions  (0) 2009.11.07
[펌] Within a namespace, no two objects can have the same name.  (0) 2009.10.29
[펌]sqlplus column 관련 명령어  (0) 2009.10.28
Posted by 자수성가한 부자
Oracle/SQL2009. 11. 7. 11:51


Multiple column comparions은 subquery를 포함할 수 있는데,

Pairwise comparions 와 Nonpairwise comparions가 있습니다.

글자 그대로 해석을 해보면 쌍으로 비교(pairwise comparisons),
안쌍으로 비교(nonpairwise comparisons)이다.

표현이 좀 무식하지만 그렇게 이해를 해보면 될 것 같다.

예제를 보면 잘 이해가 될 것이다.

우선 테이블 t1과 t2의 데이터는 아래와 같다.

T1) 
      COL1 COL2
---------- ----------
            10 A
            20 A
            10 B
            20 B

T2)
      COL1 COL2
---------- ----------
            10 A
            20 B



1) Pairwise comparions
   SELECT   * 
   FROM     t1
   
WHERE (col1, col2) IN (SELECT col1, col2
                                      FROM t2) 


   결과)
        COL1 COL2
---------- ----------
            10 A
            20 B

2) Nonpairwise comparions
    SELECT *
    FROM t1
    WHERE col1 IN (SELECT col1 FROM t2) AND
                col2 IN (select col2 from t2)
  
   결과)
        COL1 COL2
---------- ----------
            10 B
            10 A
            20 B
            20 A


내용 참고 : 오라클 교재(Oracle Database 10g SQL Fundmental Ⅱ 6-3 ~ 6-6)
예제 출처 : http://cafe.naver.com/gseducation.cafe

Posted by 자수성가한 부자
Oracle/SQL2009. 10. 29. 22:46

Within a namespace, no two objects can have the same name.

 

# The following schema objects share one namespace:

 

 - Tables

 - Views

 - Sequences

 - Private synonyms

 - Stand-alone procedures

 - Stand-alone stored functions

 - Packages

 - Materialized views

 - User-defined types

 

# Each of the following schema objects has its own namespace:

 

 - Indexes

 - Constraints

 - Clusters

 - Database triggers

 - Private database links

 - Dimensions

 

Because tables and views are in the same namespace, a table and a view in the same schema cannot have the same name. However, tables and indexes are in different namespaces. Therefore, a table and an index in the same schema can have the same name.

 

Each schema in the database has its own namespaces for the objects it contains. This means, for example, that two tables in different schemas are in different namespaces and can have the same name.

 

# Each of the following nonschema objects also has its own namespace:

 

 - User roles

 - Public synonyms

 - Public database links

 - Tablespaces

 - Profiles

 - Parameter files (PFILEs) and server parameter files (SPFILEs)

 

Because the objects in these namespaces are not contained in schemas, these namespaces span the entire database.

 

출처 : Schema Object Names and Qualifiers

Posted by 자수성가한 부자
Oracle/용어정리2009. 10. 29. 22:32

한국말로 번역하면 교착상태라고 한다.

교착상태란 동일한 자원을 공유하고 있는 두 개의 컴퓨터 프로그램들이, 상대방이 자원에 접근하는 것을 사실상 서로 방해함으로써, 두 프로그램 모두 기능이 중지되는 결과를 낳는 상황을 말한다.

'Oracle > 용어정리' 카테고리의 다른 글

Enqueue vs Latch  (0) 2009.11.26
SCN  (0) 2009.11.17
index  (0) 2009.11.17
OCP란??  (0) 2009.10.16
OCM  (0) 2009.06.27
Posted by 자수성가한 부자
Oracle/SQL2009. 10. 28. 09:47

SQL> column colum_name alias alias_name
SQL> column colum_name clear

SQL> column colum_name entmap on
SQL> column colum_name entmap off

SQL> column colum_name fold_after
SQL> column colum_name fold_before
SQL> column colum_name format a25
         주로 많이 쓰는 명령어 이다.
         지정한 column이 25개의 문자의 크기로 표현된다. 숫자로 나타내고 싶으면 999999 이런식으로 입력한다.
SQL> column colum_name heading header_text

SQL> column colum_name justify left
SQL> column colum_name justify right
SQL> column colum_name justify center

SQL> column colum_name like expr|alias
SQL> column colum_name newline
SQL> column colum_name new_value variable
SQL> column colum_name print
SQL> column colum_name noprint
SQL> column colum_name old_value

SQL> column colum_name on
SQL> column colum_name off

SQL> column colum_name wrapped
SQL> column colum_name word_wrapped
SQL> column colum_name truncated
Posted by 자수성가한 부자