ORACLE DB/기초

PL/SQL 개념과 사용법 프록시저 사용법(OracleDB 기초)

chief_sac 2021. 9. 9.
반응형

오늘은 자주 듣게되는 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가지로 구조가 나눠지는데 부가적인 부분도 함께 정리 해 보았습니다.

 

  1. Declare(선언부)문으로  원래 SQL은 변수를 사용하기 전에 미리 선언을 해주어야하지만 블럭내부에서 사용될 변수나 상수를 선언하고 필요에따라서 생략이 가능합니다.

  2. Begin(실행부)문은 Begin으로 시작해서 End문으로 종료하고 그 사이에 IF, LOOP와 같은 SQL을 사용하여 제어문, 반복문등의 로직을 실행 할 수 있습니다.

  3. 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(종류?)

  1. 익명블럭(익명 프록시저) : 이름이 없이 사용되는 PL/SQL의 블럭으로 DB에는 저장되지 않고 사용자가 필요할 때마다 반복적으로 작성하고 실행한다.(Inline-view)

  2. Procedur(프록시저) : 오라클 서버에 저장한 PL/SQL블럭으로 리턴값이 없이 흐름을 제어한다.

  3. 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;
반응형

댓글0