개발자가 자주 실행해야 하는 특정 작업이 필요할 때 호출하기 위해 절차적인 언어를 이용하여 작성한 이름이 있는 프로그램 모듈(Block)을 의미
PL/SQL BLOCK이란?
CREATE [OR REPLACE] Procedure "Procedure_name"( argument1 [MODE] data_type1, argument2 [MODE] data_type2, ...)
IS[AS]
...
BEGIN
...
EXCEPTION
...
END;
/
CREATE OR REPLACE Procedure p_DEPT_insert (
v_DEPTNO in number,
v_dname in varchar2,
v_loc in varchar2,
v_result out varchar2)
IS cnt number := 0;
BEGIN
SELECT COUNT(*) INTO CNT FROM DEPT WHERE DEPTNO = v_DEPTNO AND ROWNUM = 1;
if cnt > 0 then v_result := '이미 등록된 부서번호';
else INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES (v_DEPTNO, v_dname, v_loc);
COMMIT;
v_result := '입력 완료';
end if;
EXCEPTION
WHEN OTHERS
THEN ROLLBACK; v_result := 'ERROR 발생';
END;
/
여기서 SELECT INTO를 볼 수 있는데 COUNT(*)의 값을 변수 CNT에 삽입한다는 의미
DECLARE
AGE NUMBER; // 초기 변수 선언
BEGIN
SELECT T_AGE
INTO AGE -- 컬럼 데이터 값을 AGE 변수에 삽입
FROM TEST_USER
WHERE T_NAME = ''
DBMS_OUTPUT.PUT_LINE(AGE);
END;
/*=======================*/
[결과 출력]
> 41
into - 데이터를 삽입한다.
/*=======================*/
SQL> EXCUTE p_DEPT_insert(10, 'dev', 'jeonju', :rslt);
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> print rslt;
1) EXECUTE 구문을 이용하여 정의한 프로시저(Procedure) 실행
2) 프로시저의 OUT 변수 rslt를 print할 때, DEPTNO(10)가 이미 존재한다면 '이미 등록된 부서번호'가 출력될 것이다. 없을 경우 '입력 완료'가 출력된다.