본문 바로가기

Programming/SQL(Oracle)

DAY 67. [DataBase] PROCEDURE&FUNCTION

 

 

PROCEDURE

PL/SQL 문을 저장하는 객체이다.

필요할 때마다 복잡한 구문을 다시 입력할 필요 없이 간단하게 호출해서 실행 결과를 얻을 수 있다.

우리가 필요할 때마다 프로시저 = 객체를 호출함으로 인해서 작성한 PL/SQL문을 실행시킬 수 있다.

함수와 다르게 반환 값이 없다.

  • 특정 로직을 처리하기만 하고 결과 값을 반환하지 않는다.
  • 실무에서는 테이블에서 데이터 추출 → 데이터들을 조직에 필요에 맞게 변경해서 다른 테이블에 저장, 갱신할 때 사용한다.

 

[표현법]
            CREATE OR REPLACE PROCEDURE 프로시저명
            {
							// 매개변수 갯수의 제한은 없다.
                매개변수 1 [IN|OUT] 데이터타입 [ := DEFAULT 값];
                매개변수 2 [IN|OUT] 데이터타입 [ := DEFAULT 값];
                ...
            )
            IS
                선언부
            BEGIN
                실행부
            EXCEPTION
                예외처리부
            END [프로시저명];
            /
        
        [실행방법]
            EXECUTE(EXEC) 프로시저명(매개값1, 매개값2, ...);

 

 

✔️ 매개변수가 있는 프로시저

✔️ IN/OUT 매개변수 있는 프로시저

  • IN : 프로시저 내부에서 사용될 매개변수
  • OUT : 프로시저 외부에서

** 프로시저 실행과 동시에 모든 바인딩 변수를 출력하기 위해서는 SET AUTOPRINT ON; 을 실행시켜야 한다.

 

 


 

FUNCTION

프로시저와 거의 유사한 용도로 사용하지만 실행결과를 되돌려 받을 수 있다는 점에서 프로시저와 다름

리턴되는 데이터 타입을 명시해서 정해야 한다.

  • 프로시저와 다르게 OUT 변수를 사용하지 않아도 실행 결과를 되돌려 받을 수 있다. = RETURN
[표현법]
            CREATE OR REPLACE FUNCTION 함수명
            (
                매개변수 1 타입,
                매개변수 2 타입,
                ...
            }
            RETURN 데이터타입
            IS
                선언부
            BEGIN
                실행부
                
                RETURN 반환값; -- 프로시저랑 다르게 RETURN 구문이 추가된다.
            EXCEPTION
                예외처리부
            END [함수명];
            /

 

CURSOR

결과가 여러 개의 행으로 구해지는 SELECT 문을 처리하기 위해 실행 결과를 저장해 놓은 객체 CURSOR ~ OPEN ~ FETCH~ CLOSE 단계로 진행

cf) INTO : 조회된 결과를 변수에 대입하는 구문(결과가 하나의 행일 때)

  • FOR IN LOOP 을 이용하면 LOOP 반복 시 자동으로 CURSOR를 OPEN하고 행 인출(FETCH)
  • FOR IN 문을 사용하면 커서의 선언도 생략 가능

 


PACKAGE

프로시저와 함수를 보다 효율적으로 관리하기 위해 패키지 단위로 묶어서 관리

 

 


TRIGGER

테이블이나 뷰가 INSERT, UPDATE, DELETE 등의 DML 문에 의해 변경될 경우, 자동으로 실행될 내용을 정의하여 저장하는 객체이다.

'Programming > SQL(Oracle)' 카테고리의 다른 글

DAY 68. [DataBase] DCL  (0) 2021.10.25
DAY 66. [DataBase] PL/SQL  (0) 2021.10.23
DAY 65. [DataBase] 객체 INDEX  (0) 2021.10.22
DAY 64. [DataBase] 객체 SEQUENCE  (0) 2021.10.21
DAY 64. [DataBase] 객체 VIEW  (0) 2021.10.20