2016년 9월 28일 수요일

[오라클학원,SQL학원,PLSQL학원추천◆탑크리에듀]#6. [PLSQL강좌]변수, 데이터 타입

[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;


3.1.1 Scalar Data Type


한가지 타입의 값을 가지는 변수로써 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

댓글 없음:

댓글 쓰기