[PLSQL강좌]변수, 데이터 타입
PL/SQL 변수, 데이터 타입
[형식]
변수이름 [Constant] 데이터타입 [NOT NULL] [:= | Default 수식]
n Pl/SQL BEGIN ~ END 안에서 사용할 변수들은 DECLARE 섹션에서 정의하며 변수명은 오라클 오브젝트명과 동일한 네이밍룰을 따른다.
n NOT NULL로 정의한 변수는 값이 반드시 값이 입력되야 하므로 기본값을 주거나 초기값을 할당해야 하는데 초기값은 할당 연산자(:=)를 사용하여 부여한다.
sal number(5) not null := 0;
sal number(5) not null default 0;
n 상수를 정의하기 위해서는 CONSTANT 키워드를 사용하고 반드시 초기값을 부여해야 한다.
v_max_sal CONSTANT NUMBER(9) := 999999999;
한가지 타입의 값을 가지는 변수로써 Numeric, Character, Boolean, Datetime 계열이 있다.
[Numeric 계열]
PLS_INTEGER or BINARY_INTEGER
|
부호있는 4바이트 정수표시 -2,147,483,648 ~ 2,147,483,647, PLS_INTEGER가 저장공간을 적게 차지하고 BINARY_INTEGER보다 빠르다
|
NUMBER
|
고정/부동 소수점 숫자 표현
|
[Character 계열]
CHAR
|
32,767 바이트까지 표시하는 고정길이 문자열
|
VARCHAR2
|
32,767 바이트까지 표시하는 가변길이 문자열
|
LONG
|
32,767 바이트까지 표시하는 가변길이 문자열
|
LONG RAW
|
32,767 바이트까지 표시하는 가변길이 바이너리데이터, PL/SQL에서는 해석되지 않는다.
|
ROWID
|
물리적인 레코드를 나타내는 식별자
|
[Datetime 계열]
YEAR
|
-4712 to 9999 사이의 연도를 표시
|
MONTH
|
월
|
DAY
|
일
|
HOUR
|
시
|
MINUTE
|
분
|
SECOND
|
초
|
DATE
|
날짜 및 시각을 표시
|
[Boolean 계열]
BOOLEAN
|
논리값인 TRUE or FALSE를 표시
|
SQL> edit ojc5
-- CHAR TYPE의 비교예제
-- 작은쪽을 큰쪽과 같이 늘여 사이즈를 맞춘 후 비교
SET SERVEROUTPUT ON
DECLARE
name1 CHAR(5) := 'OJC'; -- 공백없음
name2 CHAR(10) := 'OJC '; -- 뒤부분에 공백있음
BEGIN
IF name1 = name2 THEN
DBMS_OUTPUT.PUT_LINE(name1 || ' = ' || name2);
ELSE
DBMS_OUTPUT.PUT_LINE(name2 || ' != ' || name1);
END IF;
END;
/
SQL> @ojc5
OJC = OJC
SQL> edit ojc6
/* VARCHAR2 TYPE의 비교예제
비교대상 한쪽이라도 VARCHAR2라면 CHAR와 달리 공백을
채우지 않고 비교(작은쪽을 늘이지않는다)
그러므로 아래 두 값은 같지않다.
*/
SET SERVEROUTPUT ON
DECLARE
name1 VARCHAR2(5) := 'OJC'; -- 공백없음
name2 VARCHAR2(5) := 'OJC '; -- 뒤부분에 공백있음
BEGIN
IF name1 = name2 THEN
DBMS_OUTPUT.PUT_LINE(name1 || ' = ' || name2);
ELSE
DBMS_OUTPUT.PUT_LINE(name2 || ' != ' || name1);
END IF;
END;
/
SQL> @ojc6
OJC != OJC
SQL> edit ojc7
/* VARCHAR2, CHAR TYPE의 비교예제
비교대상 한쪽이라도 VARCHAR2라면 CHAR와 달리 공백을
채우지 않고 비교(작은쪽을 늘이지않는다)
그러므로 아래 두 값은 같지않다.
*/
SET SERVEROUTPUT ON
DECLARE
name1 VARCHAR2(10) := 'OJC'; -- 공백으로 채우지 않는다.
name2 CHAR(10) := 'OJC'; -- 나머지 7자리는 공백으로 채움
BEGIN
IF name1 = name2 THEN
DBMS_OUTPUT.PUT_LINE(name1 || ' = ' || name2);
ELSE
DBMS_OUTPUT.PUT_LINE(name2 || ' != ' || name1);
END IF;
END;
/
SQL> @ojc7
OJC != OJC