꺄르륵
[Oracle SQL Developer] 기초 XXI - PL/SQL 본문
PL/SQL
1.1. 설명
- PROCEDURAL LANGUAGE SQL
- 서버에 미리 컴파일하여 저장해 놓은 모듈
- BLOCK 구조가 기본
- 변수, 매개변수, 커서, 분기문, 반복구조가 지원된다.
- ANONYMOUS BLOCK, STORED PROCEDURE, FUNCTION, PACKAGE, TRIGGER
1.2. 기본구조
[이름부(매개변수)] -- 이름부가 존재하지 않으면 한번만 사용되고 사라진다. ANONYMOUS BLOCK = 익명 클래스와 같이 생각하면 될듯
[DECLARE]
선언부(변수, 상수, 커서, 사용자 정의 예외) 타입명;
[BEGIN]
처리부(실행을 위한 로직 구성);
[EXCEPTION]
발생된 예외사항의 예외처리;
END;
-- 보기(V) -> DBMS 출력 -> + 눌러서 계정 선택
EX) 문자변수 'My First PL/SQL'을 저장한 후 출력하는 익명 블록을 작성하시오.
(V - 변수, P - 파라미터);
DECLARE
V_TEMP VARCHAR2(50); --:= 'My First PL/SQL';
-- 숫자, 문자 따지지 않고 초기화시키지 않은 값은 모두 NULL 로 초기화된다.
BEGIN
V_TEMP := 'My First PL/SQL';
DBMS_OUTPUT.PUT_LINE(V_TEMP);
END;
/
-- 익명 블럭의 끝은 '/' 를 사용하여 강제실행 시킨다. --> SQL+ 에서 사용한다. 실행명령어 이다.
EX) 반지름이 12.5인 원의 넓이를 구하는 익명 블록 작성.
DECLARE
V_RADIUS NUMBER := 12.5;
V_AREA NUMBER;
BEGIN
V_AREA := POWER(V_RADIUS,2)*3.1415926;
DBMS_OUTPUT.PUT_LINE('원의 너비 = ' || V_AREA);
END;
EX) 키보드로 회원번호를 입력 받아 회원테이블에서 해당회원을 조회한 후
회원번호, 회원명, 마일리지를 출력하는 익명블록 작성;
-- 참조형 선언 방법
-- 입력용
ACCEPT P_MEMID PROMPT '회원번호를 입력해주세요. : '
DECLARE
V_ID MEMBER.MEM_ID%TYPE; -- MEM_ID를 만들때 사용된 타입과 크기가 V_ID도 똑같이 설정된다.
V_NAME MEMBER.MEM_NAME%TYPE;
V_MILEAGE MEMBER.MEM_MILEAGE%TYPE;
V_TEMPID MEMBER.MEM_ID%TYPE;
BEGIN
V_TEMPID := '&P_MEMID'; -- 키보드로 입력받은 회원번호가 V_TEMPID에 저장된다. &는 뒤에 있는 변수가 ACCEPT 를 받아온다는 뜻.
-- INTO 를 쓰면 각 위치에 해당하는 내용을 할당한다.
SELECT MEM_ID, MEM_NAME, MEM_MILEAGE INTO V_ID, V_NAME, V_MILEAGE
FROM MEMBER
WHERE MEM_ID = V_TEMPID;
DBMS_OUTPUT.PUT_LINE('회원번호 : ' || V_ID);
DBMS_OUTPUT.PUT_LINE('회원명 : ' || V_NAME);
DBMS_OUTPUT.PUT_LINE('마일리지 : ' || V_MILEAGE);
EXCEPTION
WHEN OTHERS THEN -- JAVA의 EXCEPTION 클래스와 같음 = 모든 예외처리를 잡아준다.
DBMS_OUTPUT.PUT_LINE('예외발생 : ' || SQLERRM); -- SQL ERROR MESSAGE
END;
'프로그래밍 > DB' 카테고리의 다른 글
[Oracle SQL Developer] 기초 XXIV - LOOP (0) | 2019.10.29 |
---|---|
[Oracle SQL Developer] 기초 XXIII - PL/SQL 변수 (0) | 2019.10.29 |
[Oracle SQL Developer] 기초 XX - SYNONYM 객체 (0) | 2019.10.29 |
[Oracle SQL Developer] 기초 XIX - SEQUENCE 객체 (0) | 2019.10.29 |
[Oracle SQL Developer] 기초 XVIII - INDEX (0) | 2019.10.29 |