PROCEDURE : 프로 시저
일련의 작업들을 하나로 묶어서 저장해두었다가 호출하여 이런 작업들이 실행할 수 있게 해 준다
특정 작업을 위한 쿼리들의 블록
사용법
CREATE OR REPLACE PROCEDURE [프로시저 명](
[매개변수명] [MODE] [데이터형식])
IS
[변수명] [데이터형식] -- 지역 변수
);
BEGIN
...
END;
프로시저 호출
EXECUTE PROCEDURE [프로 시저 이름]
프로시저를 실행시키기 위해서는 EXECUTE 명령어를 사용
EXECUTE 뒤에 호출하고자 하는 프로시저 이름을 명시
프로시저를 삭제
DROP PROCEDURE [프로 시저 이름]
매개변수로 in, out, inout으로 총 세 가지 종류로 작성할 수 있다
IN
외부에서 프로시저 안으로 (매개변수)
데이터를 전달받을 때
OUT
외부에서 프로시저 결괏값을 확인
수행된 결과를 받아갈 때
INOUT
위 두 가지 목적을 위해 사용
예제 1
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE emp_info(
p_empno IN employee.eno%TYPE) IS
v_eno employee.eno%TYPE;
v_sal NUMBER;
v_ename employee.ename%TYPE;
BEGIN
SELECT eno,ename,salary INTO v_eno,v_ename,v_sal
FROM employee WHERE eno = p_empno;
dbms_output.put_line('사번 :'||v_eno);
dbms_output.put_line('이름 :'||v_ename);
dbms_output.put_line('급여 :'||v_sal);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('알수 없는 에러');
END;
/
--프로시저 호출
EXECUTE emp_info(7788);
예제 2
OUT 변수를 사용해보자
부서 테이블에 데이터 추가 (dno, dname, loc 추가)
기존 dno가 있으면 오류 아니면 추가됨
create or replace procedure dept_ins_p(
v_dno in number,
v_dname in department.dname%type,
v_loc in varchar2,
v_result out varchar2 --외부로 정보를 출력
)is
cnt number :=0; --실제 dno가 있는 지 판별하는 변수
--사용자 처리 예외처리 (exception)
EXIST_DNO_ERR exception;
begin
select count(*) into cnt from department where dno = v_dno and rownum = 1;
--dno = v_dno 가 있으면 -- and rownum = 1 > 최종결과값을 1개만
if cnt > 0 then
v_result :='등록된 부서번호';
raise EXIST_DNO_ERR; --강제로 오류(예외)를 발생 exception 호출
-- (상수 변수는 가급적 대문자로 사용)
else insert into department(dno, dname,loc) VALUES (v_dno,v_dname,v_loc);
commit;
v_result := '정상입력';
end if;
exception
when EXIST_DNO_ERR then
rollback;
dbms_output.put_line('DB 에러발생');
end;
/
SET SERVEROUTPUT ON
--OUT 전용 BIND 변수
variable v_res varchar2(50); --넉넉하게 잡아야함 -- 오류 발생
execute dept_ins_p(12,'개발1팀','대구',:v_res);
print v_res;
var v_res varchar2(50);
execute dept_ins_p(15,'개발2팀','서울',:v_res);
print v_res;
--exception 발생
variable v_res varchar2(50);
execute dept_ins_p(10,'개발1팀','대구',:v_res);
print v_res;
'SQL > ORACLE SQL' 카테고리의 다른 글
ERD : ER 다이어그램 1 (0) | 2022.11.15 |
---|---|
FUNCTION & TRIGGER : 함수와 트리 거 (0) | 2022.11.14 |
PL/SQL : 커서 CURSOR (0) | 2022.11.11 |
PL/SQL : 제어 문, 반복 문 (0) | 2022.11.11 |
PL/SQL : 변수 선언 (0) | 2022.11.11 |