본문 바로가기
데이터베이스

오라클 PL/SQL

by do_ng 2020. 11. 27.

PL(Procedural Language) -> 절차적인 언어를 뜻함 ex)C,C++,Java(객체지향이긴한데 절차적인 부분도 있음)

PL/SQL 이란? 
1 .오라클에서 절차지향적인 프로그래밍이 가능하도록 절차지향적언어를 제공함 
2. 저장모듈(PL/SQL문장을 DB서버에 저장해서 사용자와 애플리케이션 사이에서 공유할수 있도록 만든 프로그램)개발
3. 오라클의 저장모듈에는 Procedure,User Defined Function,Tirgger 있음

 

<프로시저 사용법> 

1.update_sal 프로시저는 사번과 인상될 급여를 입력받아 해당사번의 급여를 인상시킴 
create or replace Procedure update_sal(
    /* IN  Parameter */
    empno_in IN number, -- IN(파라미터가 프로시저로 들어온다라는 뜻) ,NUMBER(데이터타입)
    sal_in IN number
)
IS
BEGIN
    Update emp
    Set sal = sal + sal_in
    where empno = empno_in;
END update_sal;

2.EXECUTE 문을 이용해 프로시저를 실행 한다. (7369 사번의 급여를 2000 인상함)
execute update_sal(7369,2000);

 

<사용자 정의함수 (특정 작업을 수행하고 수행결과값을 반드시 리턴함) >
1. 음수가 입력되면 양수로 바꾸는 사용자 정의함수 생성 
create or replace Function d_ABS
    (v_input in number)
    return NUMBER 
IS 
    v_return number := 0;   -- return 값을 받아줄 변수(v_return)선언 
BEGIN
    if v_input<0 then -- 음수가 입력될경우 
        v_return := v_input * -1;
    ELSIF v_input is null then -- null이 입력될경우( v_input = null 이렇게 쓰면 null을 인식못함)
        v_return := 99999;
    else 
        v_return := v_input;
    end if;
RETURN v_return;
END;
/
2.사용자 정의함수(d_ABS) 사용 
select comm,d_ABS(comm-2000) from emp;

 

<Tigger 사용법>
    Trigger 란?? 
    -> Insert,update,delete같은 어떤 이벤트가 발생후 실행되는 프로시저
    -> Table과는 별도로 Datebase에 저장됨 
    -> View관해서 트리거를 정의할수 없고 오직 Table에 관해서 트리거 적용이가능 
    -> 트리거 내부에 commit,rollback 사용이 불가능함 


    Trigger 종류)
    1.DML 트리거 (select에 의해서는 트리거실행이 불가능) 
    2.DDL 트리거 
    
예제) 쇼핑몰에 해당주문이 결제가 될때마다 일자별 상품별로 판매수량과 판매금액을 집계하는 트리거생성

 

프로시저와 트리거의 차이점(***)
-> 프로시저는 BEGIN ~ END 사이에 COMMIT,ROLLBACK 같은 트랜잭션 명령어를 사용할수 있는 반면 트리거는 사용이 불가능함

 

 

'데이터베이스' 카테고리의 다른 글

정규화  (0) 2021.03.22
트랜잭션  (0) 2021.03.19
스토어드 프로그램이란?  (0) 2020.12.23
MySQL 완전삭제하기  (0) 2020.06.17
MySQL cmd창에서 실행하기  (0) 2020.06.17