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

 

 

 

복사했습니다!