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
'데이터베이스' 카테고리의 다른 글
28일차//[Oracle] Trigger (0) | 2021.02.22 |
---|---|
27일차//[Oracle] FUNCTION 정리 (0) | 2021.02.18 |
27일차// [Oracle] ACCEPT, DECLARE, BEGIN, END 절을 이용해 table에 insert [예제] (0) | 2021.02.18 |
27일차//[Oracle] PL 기초 (0) | 2021.02.18 |
26일차//[Oracle] index (0) | 2021.02.17 |