PL/SQL SUB PROGRAM
데이터베이스에 저장 된 PL/SQL
프로시저, 함수
익명 블록의 특징
- 이름이 없는 PL/SQL BLOCK
- 사용할 때마다 컴파일 필요
- 다른 응용 프로그램에서 사용 불가
- 값을 반환할 수 없다
- 매개변수 사용 불가
서브 프로그램의 특징
- 이름이 있는 PL/SQL BLOCK
- 데이터베이스에 저장되어 있는 객체이므로, 최초 실행될 때만 컴파일
- 다른 응용 프로그램에서 사용 가능
- 값을 반환할 수 있다 (함수)
- 매개변수 사용 가능
Procedure 프로시저
특정 처리를 위한 서브 프로그램의 한 유형
단독으로 실행 가능하며, 다른 응용 프로그램에서 호출되어 실행 가능하다.
- 구문 형식
create procedure [ procedure name ]
parameter 1 [in, out, in out] data type,
parameter 2 [in, out, in out] data type
is [as]
변수 선언부;
begin
프로시저 본문 처리부;
exception
예외처리부;
end;
- 예제 1 - 특정 직업의 사원 이름 바꾸기
CREATE OR REPLACE PROCEDURE update_emp
IS
BEGIN
UPDATE EMPLOYEES SET
FIRST_NAME = '마이클'
WHERE DEPARTMENT_ID = 20
AND JOB_ID = 'MK_MAN';
COMMIT;
END;
/
-- 프로시저를 실행시키기 위한 구문
-- EXEC or EXECUTE [ Procedure Name ];
-- dbeaver에서는 call로 호출하더라..
CALL HR.UPDATE_EMP();
- Result
- 예제 2 - 특정 사원의 급여 올려주기
CREATE OR REPLACE PROCEDURE up_sal
(emp_id EMPLOYEES.EMPLOYEE_ID%TYPE)
IS
BEGIN
UPDATE EMPLOYEES SET SALARY = 3500
WHERE EMPLOYEE_ID = emp_id;
END;
/
CALL up_sal(130);
- Result
- 예제 3 - OUT 모드 사용
-- 프로시저 생성
CREATE OR REPLACE PROCEDURE emp_info
(
emp_id IN EMPLOYEES.EMPLOYEE_ID%TYPE, -- IN 은 생략 가능
emp_name OUT EMPLOYEES.FIRST_NAME%TYPE,
emp_salary OUT EMPLOYEES.SALARY%TYPE
)
IS
BEGIN
SELECT FIRST_NAME, SALARY
INTO emp_name, EMP_SALARY
FROM EMPLOYEES e2
WHERE EMPLOYEE_ID = emp_id;
END;
/
-- 급여 조회
-- 마이클 돈 잘버네..
DECLARE
emp_name EMPLOYEES.FIRST_NAME%TYPE;
emp_salary EMPLOYEES.SALARY%TYPE;
BEGIN
emp_info(201, emp_name, emp_salary);
dbms_output.put_line(emp_name || ' 사원의 급여는 ' || emp_salary);
END;
/
- Output
- 예제 4 - 연산자 => 를 이용해서 값 지정
DECLARE
emp_name employees.last_name%TYPE;
emp_salary employees.salary%TYPE;
BEGIN
emp_info(emp_id => 124, emp_name => emp_name, emp_salary => emp_salary);
dbms_output.put_line(emp_name || ' 사원의 급여는 ' || emp_salary);
END;
/
- Output
'SQL' 카테고리의 다른 글
[Oracle] PL/SQL Package 패키지의 이해 (0) | 2020.08.07 |
---|---|
[Oracle] PL/SQL 함수 Function (0) | 2020.07.26 |
[Oracle] PL/SQL 예외 처리의 개념, 종류, 사용법 (0) | 2020.07.16 |
[Oracle] PL/SQL Cursor 의미 & 사용법 (0) | 2020.07.11 |
[Oracle] PL/SQL 반복문 (Loop, While, For Loop, Continue) (0) | 2020.07.06 |