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

27일차//[Oracle] PROCEDURE 정리

by aesup 2021. 2. 18.
728x90
  procedure function
실행속도 이미 컴파일 된 결과를 바로 실행 컴파일을 거친 후 진행해야 되기 때문에 Procedure보다 성능이 느림
리턴값 리턴값은 없지만 파라미터에 in, out을 사용하여 입력값과 출력값을 가져올 수 있다. OUT파라미턱 많으면 출력을 많이 할 수 있다. 선언한 정해진 값만 리턴이 가능하다.
SELECT 문 호출 여부 리턴값은 없지만 파라미터에 in, out을 사용하여 입력값과 출력값을 가져올 수 있으며, out  SELECT 문 내부에서 사용가능하다.
그외✴ 사용가능 insert, delete, update select

특별한 작업을 수행하는 이름이 있는 PL/SQL Block이다

매개변수를 받고 반복적으로 수행 할 수 있는 Block이다

 

PROCERDURE 생성

결과물 확인 가능

SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE MyProc(inNUM IN NUMBER, outNum OUT NUMBER)
IS
    -- 선언부
BEGIN
    --실행부
    dbms_output.put_line('inNUM' || inNUM);
    outNum := 333;
    
    --예외처리부
END;
/

 

PROCERDURE 실행

VAR val NUMBER; 
EXECUTE myproc(111,:val)

PRINT val;

 

매개변수가 없는  PROCEDURE

CREATE OR REPLACE PROCEDURE  hellooProc
IS
    msg VARCHAR2(40);
BEGIN
    msg := 'helloProc 호출';
    dbms_output.put_line('msg' ||msg);
END;
/
EXECUTE hellooProc;

 

PROCEDURE 을 이용해 departments 에 insert 해준다.

CREATE OR REPLACE PROCEDURE ADD_DEPT(p_deptno IN departments.department_id%TYPE,
                                    p_deptname IN departments.department_name%TYPE,
                                    p_loc IN departments.location_id%TYPE)
                                    
IS
BEGIN
        INSERT INTO departments(department_id, department_name, location_id)
        VALUES(p_deptno,p_deptname,p_loc);
 
 --COMMIT;
 
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('추가에 실패했습니다');
    --ROLLBACK;
END;
/

EXEC add_dept(300, '관리부', 2500);

 

사원번호를 입력 받아서 급여인상 30%

CREATE OR REPLACE PROCEDURE add_sal(p_empno NUMBER)
                                    
 IS
 BEGIN                                                                      
 UPDATE employees
 SET salary = salary * 1.3
 WHERE employee_id = p_empno;
                                   
                                    
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('추가에 실패했습니다');
END;
/                                    

EXEC add_sal(120);
728x90