CREATE [OR REPLACE] PROCEDURE 프로시저명(
    파라미터명1	[IN]	자료형,		-- IN 모드 :기본값 (생략가능)
    파라미터명2	OUT	자료형,
    파라미터명3	IN OUT	자료형
)
IS
    선언부;
BEGIN
    실행부;
END;

-- 실행
EXECUTE/EXEC/CALL 프로시저명

-- 삭제
DROP PROCEDURE 프로시저명

- EXEC 명령어나 PL/SQL 내에서 호출 가능

- SQL문에서는 사용 X

- 반환값 여러개 가능 (OUT 모드)

-- 생성 --
CREATE OR REPLACE PROCEDURE info_prof(
  v_profno  IN professor.profno%TYPE,
  v_name    OUT professor.name%TYPE,
  v_pay     OUT professor.pay%TYPE)
IS
BEGIN
  SELECT NAME, pay INTO v_name, v_pay
  FROM professor
  WHERE profno = v_profno;
END;

-- 실행 --
DECLARE 
  v_host     professor.name%TYPE;
  v_money    professor.pay%TYPE;
BEGIN
  info_prof(1001, v_host, v_money);			-- 위치 지정으로 값대입
  info_prof(v_profno => 1001, v_name => v_host, v_pay => v_money);	-- 이름 지정으로 값대입
  dbms_output.put_line('이름 : ' || v_host);
  dbms_output.put_line('교수의 급여는 ' || v_money);
END;

● 서브프로그램 내용확인(USER_SOURCE 데이터 사전)

SELECT name, type, line, text
FROM USER_SOURCE;

name : 이름, type : 종류, line : 줄번호 text : 소스 코드

● 서브프로그램 에러확인

SHOW ERRORS;

● 모드

IN OUT IN OUT
값이 서브 프로그램으로 전달 서브 프로그램으로부터 반환 전달 & 반환
형식 파라미터가 상수로 동작 초기화 안된 변수 초기화 된 변수
리터럴, 표현식, 상수, 변수 사용가능 변수만 사용가능 변수만 사용가능
기본값 할당 O 기본값 할당 X 기본값 할당 X