꺄르륵
[Oracle SQL Developer] 기초 XXIII - PL/SQL 변수 본문
PL/SQL 변수
1. 변수의 종류
1.1. SCALAR 변수
- 일반변수로 하나의 자료만 저장한다.
1.2. 참조형 변수(REFERENCE)
- 해당 테이블의 행(ROW)나 컬럼의 데이터 타입과 크기를 참조한다.
1.3. COMPOSITE 변수
- 배열변수
- RECORD TYPE 과 TABLE TYPE
1.4. BINDING 변수
- 매개변수로 사용되는 IN, OUT 형 변수
- 반환되는 데이터 저장을 위한 변수
2. 일반 변수
2.1. 설명
- 고급언어의 지역변수와 동일한 기능
2.2. 사용형식
변수명 데이터타입|테이블명.컬럼명|%[ROW]TYPE [(크기)][:= 초기값]
(1) 데이터타입
. 표준 SQL의 데이터 타입 사용
. BINARY_INTEGER : -2147483648 ~ 2147483647 (4byte 정수형) = 2^31 ~ 2^31-1
PLS_INTEGER : BINARY_INTEGER 와 동일, 저장공간과 처리 속도가 더 효율적이다.
. BOOLEAN : TRUE, FALSE, NULL
. 테이블명.컬럼명%TYPE : 해당 컬럼괃 동일한 타입 및 크기로 설정한다.
. 테이블명%ROWTYPE : 해당테이블 행과 같은(모든 컬럼)과 동일하게 지정한다.
EX) 사원테이블에서 임의의 부서를 선택하여 사원정보를 조회하되 처음 조회된 사원의 급여가
1-3000 사이이면 '낮음', 3001-6000 사이이면 '보통', 6001-10000 사이면 '높음' 그 이상이면 '최상위'를 비고에 출력하시오.
* 사원번호, 사원명, 급여, 비고
DECLARE
V_ID EMP.EMPLOYEE_ID%TYPE;
V_NAME EMP.EMP_NAME%TYPE;
V_SALARY EMP.SALARY%TYPE;
V_MESSAGE VARCHAR2(20);
V_DEPT_ID DEPT.DEPARTMENT_ID%TYPE;
BEGIN
V_DEPT_ID := TRUNC(SYS.DBMS_RANDOM.VALUE(10,120),-1); --(ROUND(SYS.DBMS_RANDOM.VALUE(10,120)/10))*10
SELECT EMPLOYEE_ID, EMP_NAME, SALARY
INTO V_ID, V_NAME, V_SALARY
FROM EMP
WHERE DEPARTMENT_ID = V_DEPT_ID
AND ROWNUM = 1;
IF V_SALARY <= 3000 THEN
V_MESSAGE := '낮음';
ELSIF V_SALARY <= 6000 THEN
V_MESSAGE := '보통';
ELSIF V_SALARY <= 10000 THEN
V_MESSAGE := '높음';
ELSE V_MESSAGE := '최상위';
END IF;
DBMS_OUTPUT.PUT_LINE('사원번호 : ' || V_ID);
DBMS_OUTPUT.PUT_LINE('부서번호 : ' || V_DEPT_ID);
DBMS_OUTPUT.PUT_LINE('사원명 : ' || V_NAME);
DBMS_OUTPUT.PUT_LINE('급여 : ' || V_SALARY);
DBMS_OUTPUT.PUT_LINE('비고 : ' || V_MESSAGE);
END;
2. IF 문
2.1. 설명
- 고급언어의 IF 문과 동일한 기능을 제공한다.
2.2. 사용형식
IF 조건 THEN
처리문;
[ELSIF 조건 THEN
처리문;
:
ELSE
처리문;]
END IF;
EX) 키보드로 수 하나를 입력 받아 짝수이면 'EVEN NUMBER',
짝수이면 'ODD NUMBER' 를 출력하도록 하여라
ACCEPT P_NUM PROMPT '숫자를 입력해주세요. : '
DECLARE
V_NUMBER NUMBER;
V_RESULT VARCHAR2(50);
BEGIN
V_NUMBER := TO_NUMBER('&P_NUM');
IF MOD(V_NUMBER,2) = 0 THEN
V_RESULT := 'EVEN NUMBER';
ELSE V_RESULT := 'ODD NUMBER';
END IF;
DBMS_OUTPUT.PUT_LINE(V_NUMBER||'의 홀/짝 결과 : ' || V_RESULT);
END;
EX) 4자리 년도를 입력 받아 윤년인지 평년인지 구분하는 블록 작성
(윤년 연도가 4의 배수이면서 100의 배수가 아니거나 또는 400의 배수)
ACCEPT P_YEAR PROMPT '년도를 입력해주세요. : '
DECLARE
V_YEAR NUMBER;
V_RESULT VARCHAR(50);
BEGIN
V_YEAR := TO_NUMBER('&P_YEAR');
IF(MOD(V_YEAR,4) = 0 AND MOD(V_YEAR,100) <> 0) OR (MOD(V_YEAR,400) = 0) THEN
V_RESULT := '윤년';
ELSE V_RESULT := '평년';
END IF;
DBMS_OUTPUT.PUT_LINE('입력하신 ' || V_YEAR || '년은 ' || V_RESULT || '입니다');
END;
'프로그래밍 > DB' 카테고리의 다른 글
[Oracle SQL Developer] 기초 XXV - CURSOR (0) | 2019.10.29 |
---|---|
[Oracle SQL Developer] 기초 XXIV - LOOP (0) | 2019.10.29 |
[Oracle SQL Developer] 기초 XXI - PL/SQL (0) | 2019.10.29 |
[Oracle SQL Developer] 기초 XX - SYNONYM 객체 (0) | 2019.10.29 |
[Oracle SQL Developer] 기초 XIX - SEQUENCE 객체 (0) | 2019.10.29 |