안녕하세요!
PL/SQL 변수와 제어문 (IF, CASE 같은 조건문과 반복문,(LOOP, FOR, WHILE) 등에 대해 정리하였습니다.
1> PL/SQL 변수?
- 역할 : 데이터 임시 저장
- 변수 반복 재사용 가능
- 문자로 시작, 30 byte 이하, 숫자, 특수문자 조합 가능, 예약어 포함 불가
- 선언부 (Declare) 에서 변수 선언
2> PL/SQL 변수 종류
- PL/SQL 변수 : 단순변수(스칼라, 참조), LOB, 복합변수
- 비 PL/SQL 변수 : BIND 변수
- SCALAR 변수 : 단일 값을 갖는 변수의 데이터 형을 지정
Identifier [CONSTANT] datatype [NOT NULL] [:= DEFAULT expr];
+ 데이터타입
Char() : 고정 길이의 문자형 (최소 1 바이트 ~ 최대 32,767바이트)
VARCHAR2() : 가변 길이의 문자형
BINARY_INTEGER : 정수 저장 타입
BOOLEAN : 논리적 계산 값 (TRUE, FALSE, NULL)
DATE : 날짜 및 시간에 대한 기본유형
TIMESTAMP : DATE의 확장 형태로 초 단위까지 저장
- REFERENCE 변수 : 변수의 데이터 형을 다른 컬럼에서 참조 후 지정
No compony.no’TYPE%’ // compony 테이블의 컬럼인 no 데이터형 선언
Row compony.patner%rowtype
DECLARE
record test_rw%ROWTYPE;
BEGIN
SELECT * INTO record
FROM test_rw
WHERE num = 1;
INSERT INTO test_rw2
VALUES record;
END;
/
3> PL/SQL 제어문
프로그래밍 언어에서 제어문과 같이 오라클 PL/SQL 에서도 제공 (조건문, 반복문 등)
- 조건문 (IF ~ END IF) 문법
IF (조건) THEN 실행문장;
END IF;
- 예시
DECLARE
vmemno team.memno%TYPE;
vmemname team.memname%TYPE;
vmemgrade team.memgrade%TYPE;
BEGIN
SELECT memno, memname, memgrade
INTO vmemno, vmemname, vmemgrade
FROM LIVERPOOL_Table
WHERE memname = ‘GERRARD’
IF (vmemno = ‘100’) THEN vmemgrade := ‘A’ ;
END IF;
IF (vmemno = ‘200’) THEN vmemgrade := ‘B’ ;
ELSE IF (vmemno = ‘300’) THEN vmemgrade := ‘C’ ;
END IF;
DBMS_OUTPUT.PUT_LINE (vmemname || ‘ ‘ ||vmemgrade);
END;
/
- 조건문 (CASE문) 문법
CASE [조건]
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과 2
[ELSE 기본값]
END;
- 예시
DECLARE
vmemno team.memno%TYPE;
v_teamname varchar2(100);
vmemgrade team.memgrade%TYPE;
vmemname team.memname%TYPE;
BEGIN
SELECT memno, memename, memgrade
INTO vmemno, vmemname, vmemgrade
FROM team
WHERE teamname = &teamname;
V_teamname := CASE vmemno
WHEN 10 THEN ‘Mancity’
WHEN 20 THEN ‘Chelsea’
WHEN 30 THEN ‘Arsenal’
END;
END;
/
V_teamname := CASE vmemno
WHEN 10 THEN ‘Mancity’
부분은 아래와 같이 조건 컬럼을 WHEN 절에 직접 선언하여도 괜찮습니다.
V_teamname := CASE
WHEN vmemno = 10 THEN ‘Mancity’
- 반복문 (LOOP, WHILE, FOR)
a. LOOP 반복문 : PL/SQL 문장 수행 후 조건 체크
<Grammar>
LOOP
PL/SQL 문장;
EXIT [ 조건 ] ;
END LOOP;
<Example>
DECLARE
no number :=0;
BEGIN LOOPDBMS_OUTPUT.PUT_LINE(no)
no := no + 10;
EXIT WHEN no > 50;
END LOOP;
END;
/
b. WHILE 반복문 : 시작점에서 조건 체크 후 PL/SQL 문장 수행
BASIC LOOP는 조건에 상관없이 일단 기본적으로 PL/SQL 문장이 1번 수행, WHILE문은 조건이 틀리면 아예 X
<Grammar>
WHILE 조건 LOOP
PL/SQL 문장
END LOOP;
<Example>
DECLARE
No number :=0;
BEGIN
WHILE no < 100 LOOP
DBMS_OUTPUT.PUT_LINE(no);
no := no + 10;
END LOOP;
END;/
c. FOR 문
FOR변수 IN 시작점 .. 종료점 LOOP
문장;
END LOOP;
BEGIN
FOR a IN 0 .. 100 LOOP
DBMS_OUTPUT.PUT_LINE(a);
END LOOP;
END;/
PL/SQL cursor 커서, Oracle Exception 예외처리는 아래 내용 참고하시기 바랍니다.
[참고 글]
[IT/Data] - [PL/SQL 개념] 오라클 프로시저 PL/SQL 기본 정리
[IT/Data] - [PL/SQL개념] PL/SQL cursor 커서, Oracle Exception 예외처리
[IT/Data] - 오라클 PL/SQL PROCEDURE (프로시저), FUNCTION (함수) 설명
'IT ▶ > Database' 카테고리의 다른 글
[PL/SQL 개념] 오라클 PL/SQL PROCEDURE (프로시저), FUNCTION 설명 (0) | 2020.01.11 |
---|---|
[PL/SQL 개념] PL/SQL cursor 커서, Oracle Exception 예외처리 (0) | 2020.01.11 |
[PL/SQL 개념] 오라클 프로시저 PL/SQL 기본 정리 (0) | 2019.12.21 |
[데이터베이스 기초] 오라클 SQL 기본 개념 (SELECT, ORDER BY, NVL) (0) | 2019.12.15 |
[Big Data] Introduction about Big Data (빅데이터 소개) (0) | 2019.11.29 |