반응형
오늘은 자주 듣게되는 SQL을 배우면서 프로시져를 설명하면서 들었던 PL/SQL 에대한 공부를 정리하려고 합니다!
먼저 PL/SQL이란
Oracle's Procedural Language extension to SQL 의 줄임말이며 SQL의 확장된 개념으로서 오라클에서 제공하는 프로그래밍 언어 라고 생각하시면 편할것같습니다.
- 본질적으로는 프로그램 언어의 특성을 수용한 SQL의 확장을 말하며 SQL의 데이터를 조작하는 DML문과 질의(검색)을 하는 Query문 절차적인 데이터 처리를 주요한 목적으로 하고있습니다.
- 집학적 성향이 강한 SQL에 일반프로그램 언어의 요소를 추가 하여서 원래는 SQL에서 지원하지 않았던 반복문과 조건문을 지원합니다.
사용형식은 자바를 예시로 들어서 보시면 이해가 조금 더 잘될것같습니다.
// 자바
String variable = value;
// 오라클DB
variable varchar2 := value;
기본구조
크게 3가지로 구조가 나눠지는데 부가적인 부분도 함께 정리 해 보았습니다.
- Declare(선언부)문으로 원래 SQL은 변수를 사용하기 전에 미리 선언을 해주어야하지만 블럭내부에서 사용될 변수나 상수를 선언하고 필요에따라서 생략이 가능합니다.
- Begin(실행부)문은 Begin으로 시작해서 End문으로 종료하고 그 사이에 IF, LOOP와 같은 SQL을 사용하여 제어문, 반복문등의 로직을 실행 할 수 있습니다.
- Exception(예외 처리부)문은 Begin에서 사용되는 End의 바로 직전에 사용되면서 실행도중한 에러의 발생을 Catch하여 후속조치를 취할 수 있고 또한 생략이 가능합니다.
사용예시
사용예시를 적기전에 안에서 사용될 연산자에 대해 간단한 정리를 하자면
- 연산자
:= 는 대입연산자 ** 제곱연산자 NOT 논리연산자 AND 논리연산자 OR 논리연산자
입니다.
또한 PL/SQL의 변수명을 작명시 V_'XXX' 접두어를 사용하고 'XXX' 에는 변수명을 적으면됩니다.
DECLARE
V_DNAME VARCHAR2(14);
V_LOC VARCHAR2(13);
BEGIN
SELECT DNAME, LOC INTO V_DNAME, V_LOC
FROM DEPT
WHERE DEPTNO = 10;
DBMS_OUTPUT.PUT_LINE(V_DNAME || ' / ' || V_LOC); -- 해당함수는 단순하게 PRINT하는것
END;
/ -- 또다른 약속으로 PL/SQL의 경우 종료표기는 ;가 아니라 /(슬래시)로 합니다.
마지막으로 PL/SQL Block(종류?)
- 익명블럭(익명 프록시저) : 이름이 없이 사용되는 PL/SQL의 블럭으로 DB에는 저장되지 않고 사용자가 필요할 때마다 반복적으로 작성하고 실행한다.(Inline-view)
- Procedur(프록시저) : 오라클 서버에 저장한 PL/SQL블럭으로 리턴값이 없이 흐름을 제어한다.
- function : 프록시저와 같이 오라클 서버에 저장한 PL/SQL블럭이지만 리턴값이 있어서 기능과 처리결과를 가져다 준다.
(사용형식)
CREATE PROCEDURE printdept IS
--선언부
BEGIN
END;
/
예시로는
CREATE OR REPLACE PROCEDURE printdept IS
V_DNAME DEPT.DNAME%TYPE;
V_LOC DEPT.LOC%TYPE;
BEGIN
SELECT DNAME, LOC INTO V_DNAME , V_LOC
FROM DEPT
WHERE DEPTNO = 10;
DBMS_OUTPUT.PUT_LINE(V_DNAME || ' / ' || V_LOC);
END;
/
/*프로 시져 실행은
EXEC 프로시져명 */
EXEC printdept;
반응형
'ORACLE DB > 기초' 카테고리의 다른 글
SQLD 공부 정리 (1. 데이터 모델링 이해) (3) | 2022.01.18 |
---|---|
MYSQL DAO(DTO) 변수 한번에 만들기(Mysql to Java 자료형) (0) | 2021.10.06 |
OracleDB 집계함수란? (0) | 2021.07.29 |
오라클 DB의 여러가지 데이터타입(문자열,숫자,날짜,2진자료형) (0) | 2021.07.24 |