[본문스크랩] PL/SQL (2) - 데이터형
###################################################################################################
# source site : blog.naver.com/tangamjaelt
# master : 강용운
# email : tangamjaelt@korea.com
# last release : 2007.05.01
###################################################################################################
데이터형 (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;
/
********************************************************************************************************************
'오라클' 카테고리의 다른 글
[본문스크랩] PL/SQL (4) - 연산자 (0) | 2007.12.21 |
---|---|
[본문스크랩] PL/SQL (3) - 블럭 구조 (0) | 2007.12.21 |
[본문스크랩] PL/SQL (1) - 개념과 예제 (0) | 2007.12.21 |
Oracle Stored Procedure 생성 (0) | 2007.12.21 |
ORA-00911:문자가 부적합 합니다.라는 오류가 뜰때 (0) | 2007.11.03 |