익명 PL/SQL이란 이름을 가지지 않은 PL/SQL프로그램으로 서버에 저장되지 않고, 일회성으로 실행되는 유형의 PL/SQL프로그램을 말하는 것이다.
앞의 글에서 생성한 scott 계정의 테이블 emp를 사용해 다음과 같은 사항을 처리하는 PL/SQL 프로그램을 생각해보자.
-요구 사항 : (사번, 사원명, 업무)가 값 (v_empno, v_ename, v_job)으로 주어졌을 때,
1. 사번 v_empno가 테이블 emp에 존재한다면, 테이블의 해당 로우의 (사원명,업무)를 (v_ename, v_job)으로 변경
2. 존재하지 않으면, -해당 정보를 테이블 emp에 등록
-등록 시 부서 코드 값은 20을 기본값으로 사용
DECLARE
--상수
c_default_deptno CONSTANT NUMBER := 20; -- 기본 부서 코드
--처리 대상 사원 정보를 값으로 가지는 변수 정의
v_empno NUMBER(4) := 7788; --처리 대상 사번
v_ename VARCHAR2(10) := 'SCOTT'; --처리 대상 사원명
v_job VARCHAR2(9) := 'ANALYST'; --처리 대상 사원의 업무
-- 추가 변수
v_cnt NUMBER; --건수
BEGIN
SELECT COUNT(*)
INTO v_cnt
FROM emp
WHRER empno = v_empno;
--1. 해당 사번이 테이블 emp에 존재하면
IF v_cnt > 0 THEN
-- 1.1 (사원명, 업무)를 (v_ename, v_job)으로 변경
UPDATE emp
SET ename = v_ename,
job = v_job
WHERE empno = v_empno;
DBMS_OUTPUT.PUT_LINE('사원 "' || v_ename || "'의 정보가 변경되었습니다.');
ELSE --2. 해당 사번이 emp 테이블에 존재하지 않으면
-- 새로운 사원 정보를 테이블에 등록
INSERT INTO emp(empno, ename, job, deptno)
VALUES(v_empno, v_ename, v_job, c_default_deptno);
DBMS_OUTPUT.PUT_LINE('신입사원 "' || v_ename || "'의 정보가 등록되었습니다.');
END IF;
COMMIT;
EXCEPTION WHEN OTHERS THEN
ROLLBACK; --모든 변경 취소
DBMS_OUTPUT.PUT_LINE('응용 프로그램 오류 발생' || CHR(10) || SQLERRM);
END;
/
'DATABASE > SQL, PL-SQL' 카테고리의 다른 글
PL/SQL 구분자 (0) | 2021.01.17 |
---|---|
PL/SQL 개념 (0) | 2021.01.16 |
오라클 scott 예제 스키마 (0) | 2021.01.16 |
윈도우 10에서 Oracle 11g 설치(express버젼) (0) | 2021.01.16 |
SQL 서브쿼리 예제 (0) | 2020.11.14 |
댓글