PL/SQL 3: 셀렉트, 딜리트 예제
–미리 만들어진 프로시저 드랍
–CREATE OR REPLACE를 쓰기 때문에 기존의 프로시저를 드랍하지 않아도 된다.
–CREATE OR REPLACE를 쓰는 것은 뷰(VIEW)가 있다. 뷰는 ALTER가 없기 때문이다.
DROP PROCEDURE proEmpInsert;
DROP PROCEDURE proEmpShow;
–추가(인서트)와 수정(업데이트)를 구분해서 실행해주는 프로시저
CREATE OR REPLACE PROCEDURE proEmpInUP(
vempno IN proEmp.empno%TYPE,
vename IN proEmp.ename%TYPE,
vjob IN proEmp.job%TYPE,
vsal IN proEmp.sal%TYPE,
vdeptno IN proEmp.deptno%TYPE
)
IS
BEGIN
–사번이 없으면 만들고, 사번이 있으면 수정(업데이트한다)
IF(vempno=0) THEN
INSERT INTO proEmp VALUES((SELECT NVL(MAX(empno)+1,1) FROM proEmp),vename,vjob,SYSDATE,vsal,vdeptno);
ELSE
UPDATE proEmp SET ename=vename,job=vjob,sal=vsal,deptno=vdeptno WHERE empno=vempno;
END IF;
COMMIT;
END;
/
–셀렉트하는 프로시저
CREATE OR REPLACE PROCEDURE proEmpShow(
vempno IN proEmp.empno%TYPE,
vename OUT proEmp.ename%TYPE,
vjob OUT proEmp.job%TYPE,
vday OUT proEmp.hiredate%TYPE,
vsal OUT proEmp.sal%TYPE,
vdeptno OUT proEmp.deptno%TYPE
)
IS
BEGIN
SELECT ename,job,hiredate,sal,deptno INTO vename,vjob,vday,vsal,vdeptno FROM proEmp WHERE empno=vempno;
END;
/
–삭제하는 프로시저
CREATE OR REPLACE PROCEDURE proEmpDelete(vempno IN proEmp.empno%TYPE)
IS
BEGIN
DELETE FROM proEmp WHERE empno=vempno;
COMMIT;
END;
/