본문 바로가기
프로그래머의 길/Oracle

PL/SQL (2) - 데이터형

by 하늘아래. 2008. 1. 14.
반응형

데이터형 (datatype)

- PL/SQL 에서 블럭은 프로그래밍의 기본 단위이다.

- 블럭은 프로그램 코드와 변수 선언문을 갖고 있다.


스칼라 변수

VARCHAR2

가변 길이 문자 스트링

CHAR

고정 길이 문자 스트링

NUMBER

고정 소수점 또는 부동 소수점 숫자

DATE

날짜

BOOLEAN

TRUE/FALSE

 

변수 명명 규칙

변수이름은 문자,$,_,# 으로 구성된다.

변수이름은 반드시 문자로 시작한다.

변수이름은 최대 30자이다.

변수이름은 대소문자를 구분하지 않는다.

알아보기쉽게 쓴다.  (empyearsal → emp_year_sal → Emp_Year_Sal)

변수, 함수, 프로시저 이름등을 쉽게 구분하기 위해 예약어는 대문자만 사용하는 경우도 있다.


변수선언

student_id VARCHAR(16);

student_name VARCHAR2(10000);

 

변수에 할당

student_id := 'kangyw';

student_name := 'Kang Yong Woon';

 

CHAR VARCHAR 차이점

- CHAR  고정된 길이의 데이터를 저장. 빈공간은 공백으로 채워짐. (ex. 학번,사번,주민번호 정해진 길이)

   스트링 비교를 경우, 공백도 1byte 계산됨.

- VARCHAR 정해지지 않은 길이의 데이터를 저장하는데 사용됨.



[예제1] CHAR VARCHAR 차이점.


$ vi /export/home/oracle/plsql/test_35p.sql

 

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

DECLARE

         student_id CHAR(20);

         student_name VARCHAR(20);

BEGIN

         student_id := 'kangyw';

         student_name := 'kangyw';

 

         IF

                  student_id = student_name;

         THEN

                  DBMS_OUTPUT.PUT_LINE('Same');

         ELSE

                  DBMS_OUTPUT.PUT_LINE('Not Same');

         END IF;

END;

/

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

 

SQL> SET SERVEROUTPUT ON

SQL> @/export/home/oracle/plsql/test_35p

 

 

사용자 삽입 이미지


- CHAR VARCHAR 모두 20 byte 할당 받지만,

- CHAR kangyw 사용하고 남은 14byte 공백으로 채우고, VARCHAR 6 byte 사용하고 14 byte 사용하지 않는다.

- 공백을 무시하고 비교하기 위해서는 rtrim 함수를 사용한다.



[예제2] RTRIM 사용하여 문자 비교하기 (우측 공백 제거 함수)


$ vi /export/home/oracle/plsql/test_36p.sql

 

*************************************************************************
DECLARE

         student_id CHAR(20);

         student_name VARCHAR(20);

BEGIN

         student_id := 'kangyw';

         student_name := 'kangyw';

 

         IF

                  RTRIM(student_id) = student_name;

         THEN

                  DBMS_OUTPUT.PUT_LINE('Same');

         ELSE

                  DBMS_OUTPUT.PUT_LINE('Not Same');

         END IF;

END;

/

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

 

사용자 삽입 이미지

- 공백을 제거하니 Same 이라는 결과가 나온다.



NUMBER

- 고정 소수점과 부동 소수점 숫자를 정의

- 범위 : 1.0E-123 ~ 9.99E125 까지

- 정밀도 : 자리를 사용할 것인지 표시

- 스케일 : 소수점의 위치를 표시

- 형식 : 변수명 NUMBER [(정밀도[,스케일])]

) NUMBER(4,2) 4자리 수이고 소수점은 오른쪽 2번째에 온다.
        73.127 입력하면 반올림이 되어 73.13 나온다.
) NUMBER(3)기본스케일 0. 정수로 표시되고,소수 첫째자리에서 반올림 된다.
         345.1 입력하면 345 표시된다. -345.12 입력하면 -345 표시된다.
) NUMBER(5,-2) 스케일이 음수로 표시되면 정수쪽으로 반올림이 발생한다.
        10345 입력하면 100단위로 끊어져, 10300 나온다. 주식 100 단위로 표시할 사용.


[
예제3] NUMBER

 

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

DECLARE

        number1 NUMBER(4,2);

        number2 NUMBER(3);

        number3 NUMBER(5,-2);

BEGIN

        number1 := 73.127;

        number2 := 345.1;

        number3 := 10345;

 

        DBMS_OUTPUT.PUT_LINE(number1);

        DBMS_OUTPUT.PUT_LINE(number2);

        DBMS_OUTPUT.PUT_LINE(number3);

END;

/

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

 

 

사용자 삽입 이미지



DATE

- 날짜와 시간값을 저장

- 기본적으로 날짜,시간이 항상 포함된다.

- 시간을 지정하지 않으면 자정으로 표시. (am 12.:00:00)

- 범위 : BC 471 1 1 ~ AD 4712 12 31 까지

- 시간을 빼고 날짜만 비교하려면 TRUNC 함수를 사용한다.


[예제4] DATE

 

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

DECLARE

        birthday DATE;

BEGIN

        birthday := TO_DATE('28-DEC-1982', 'DD-MON-YYYY');

        DBMS_OUTPUT.PUT_LINE(birthday);

END;

/

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

 

 

사용자 삽입 이미지

 

 

 

반응형