728x90
반응형

1. ROWID

    (오라클에서 내부적으로 사용되는 컬럼을 pseudocolumn 이라고 하며 ROWID, ROWNUM 등이 있다)

    - DB에서 컬럼이 위치한 장소 (물리적인 주소)

    - 테이블에서 row 에 대한 고유한 값으로서(unique identifier) 사용자가 임의로 변경할 수 없다.

    - ROWID를 사용하여 테이블의 row를 검색할 때 single row를 찾아가는데 가장 빠른 검색방법이 될 것이다 

 

    - rowid 는 16진수로 되어 있고 번호는 아래와 같은 의미를 가지고 있다.

      예 ) emp 테이블의 첫번 째 rowid  - "AAAM8NAAEAAAAmUAAA"

                                                        AAAM8N  : object의 고유번호

                                                                    AAE        : tablespace 번호 또는 상대적 file 번호

                                                                         AAAAmU : block 번호

                                                                                     AAA        : block 내의 slot 번호 또는 row 번호

     

 

   

   예) select rowid, emp.empno, emp.ename, emp.job  ( select rowid, emp.* from emp; - emp의 모든 컬럼과 rowid 보기)

        from emp

        where rownum <= 3;             -----------------------------> emp table의 ROWID 1~3인 데이터 확인하기

 

      

 

 

   예) 커서의 ROWID를 통한 데이터 검색

        create or replace procedure test_emp_sal_update_proc2(p_deptno number, p_percent number)
        is
            cursor emp_cur (dno number) is
            select rowid as id, e.* 
            from test_emp e
            where deptno = dno
            for update;      -------------> select 문이 실행될 때 test_emp 테이블에 LOCK이 걸린다
        begin
           for r in emp_cur(p_deptno) loop
               update test_emp
               set sal = r.sal*p_percent
               where rowid = r.id; 
-----> r 구조체의 ROWID 필드값과 test_emp 테이블의 ROWID값이 같은 데이터 찾기
               end loop;
        end;
         /

 

 

 

  1-1. ROWNUM    

        - 테이블에서 select 되어진 일련 번호임 ( 1부터 시작함 )

 

        - select rownum, empno, ename, sal  ( = select rownum, emp.empno, emp.ename, emp.sal from emp;)

          from emp;            

       

 

 

 

 

 

 

2. 숫자 데이터 타입

 

  2-1 PLS_INTEGER : -2147483648 ~ 21473647 사이의 정수

 

       - PL/SQL 내에서만 이용하도록 만들어진 data type , pls_integer 값을 DB 열에 저장할 수는 없다.

       - NUMBER 변수보다 작은 범위를 갖는다. 따라서 메모리를 적게 차지한다.

       - CPU 산술 연산을 수행하므로

         DB Library API를 통해 연산을 수행하는 NUMBER나 BINARY_INTEGER 보다 빠른 속도를 제공한다

         ( 9i 버전 까지 많이 사용했다 )

 

 

 

  2-2 BINARY_INTEGER : -2147483647 ~ 2147483647 사이의 정수

 

        - PLS_INTEGER 와 비슷하며 NUMBER 변수보다는 메모리를 적게 차지하지만

          PLS_INTEGER 보다는 약간 느린 편이다

        - 더 큰 data를 넣으면 NUMBER 로 자동할당 된다. 그래서 BINARY_INTEGER를 더 많이 씀

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,