본문 바로가기
IT ▶/Database

[PL/SQL개념] 오라클 프로시저 개념 정리 – (2) PL/SQL 변수, 제어문

by Jordan_ 2020. 1. 11.
728x90
반응형

 

안녕하세요!

 

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.noTYPE%   // 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

 

 

 

728x90

 

 

 

- 반복문 (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 (함수) 설명

 

 

 

728x90
반응형