PL/SQL 3: 셀렉트, 딜리트 예제

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;
/