------------ ***** 사용자 정의 예외절(EXCEPTION) ***** ----------------
예외절 = 오류절
※ 형식
exception
when 익셉션이름1 [or 익셉션이름2] then
실행문장1;
실행문장2;
실행문장3;
when 익셉션이름3 [or 익셉션이름4] then
실행문장4;
실행문장5;
실행문장6;
when others then
실행문장7;
실행문장8;
실행문장9;
=== tbl_member_test1 테이블에 insert 할 수 있는 요일명과 시간을 제한해 두겠습니다. ===
tbl_member_test1 테이블에 insert 할 수 있는 요일명은 월,화,수,목,금 만 가능하며
또한 월,화,수,목,금 중에 오후 2시 부터 오후 5시 이전까지만(오후 5시 정각은 안돼요) insert 가 가능하도록 하고자 한다.
만약에 insert 가 불가한 요일명(토,일)이거나 불가한 시간대에 insert 를 시도하면
'영업시간(월~금 14:00 ~ 16:59:59 까지) 아니므로 입력불가함!!' 이라는 오류메시지가 뜨도록 한다.
create or replace procedure pcd_tbl_member_test1_insert
(p_userid IN tbl_member_test1.userid%type -- IN 은 생략 가능하다. (OUT 은 불가.) ==> 생략하면 IN 으로 본다.
, p_passwd tbl_member_test1.passwd%type
, p_name tbl_member_test1.name%type
)
is
v_length number(2);
error_insert EXCEPTION;
v_ch varchar2(1);
v_flag_upper number(1) := 0; -- 대문자 표식
v_flag_lower number(1) := 0; -- 소문자 표식
v_flag_num number(1) := 0; -- 숫자 표식
v_flag_special number(1) := 0; -- 특수문자 표식
error_dayTime exception;
begin
-- 입력(insert)이 불가한 요일명과 시간대를 알아보기 --
if( to_char(sysdate, 'd') in ('1','7') or -- to_char(sysdate, 'd') ==> '1'(일), '2'(월), '3'(화), '4'(수), '5'(목), '6'(금), '7'(토)
to_char(sysdate, 'hh24') < '14' or to_char(sysdate, 'hh24') > '16'
) then raise error_dayTime;
else -- 암호를 검사한다 --
v_length := length(p_passwd);
if ( v_length < 8 or v_length > 20 ) then
raise error_insert; -- 사용자가 정의하는 예외절(EXCEPTION) 을 구동하라.
else
for i in 1..v_length loop
v_ch := substr(p_passwd, i, 1);
if( v_ch between 'A' and 'Z' ) then v_flag_upper := 1;
elsif( v_ch between 'a' and 'z' ) then v_flag_lower := 1;
elsif( v_ch between '0' and '9' ) then v_flag_num := 1;
else v_flag_special := 1;
end if;
end loop;
if ( v_flag_upper * v_flag_lower * v_flag_num * v_flag_special = 1 )
then insert into tbl_member_test1(userid, passwd, name) values(p_userid, p_passwd, p_name);
dbms_output.put_line('>> 입력성공 <<');
else
raise error_insert; -- 사용자가 정의하는 예외절(EXCEPTION) 을 구동하라.
end if;
end if;
end if;
exception
when error_dayTime then
raise_application_error( -20004, '>> 영업시간(월~금 14:00 ~ 16:59:59 까지) 아니므로 입력불가함!! <<');
when error_insert then
raise_application_error( -20003, '암호는 최소 8글자 이상이면서 대소문자, 숫자, 특수문자가 혼합되어야 합니다.');
end pcd_tbl_member_test1_insert;
-- Procedure PCD_TBL_MEMBER_TEST1_INSERT이(가) 컴파일되었습니다.
[실행]
exec pcd_tbl_member_test1_insert('eomjh', 'aBcd1234$', '엄정화');
-- PL/SQL 프로시저가 성공적으로 완료되었습니다.
-- >> 입력성공 << (수 오후 16:38)
exec pcd_tbl_member_test1_insert('kangkc', 'wXyzd1234$', '강감찬');
-- ORA-20004: >> 영업시간(월~금 14:00 ~ 16:59:59 까지) 아니므로 입력불가함!! << (수 오후 17:15)
commit;
select *
from tbl_member_test1;
'SQL' 카테고리의 다른 글
| ---- ===== **** CURSOR ( 중요 ) **** ===== ----- (0) | 2022.07.14 |
|---|---|
| 배열처럼 사용되는 table 타입 변수 (0) | 2022.07.14 |
| ===== ***** 반복문 ***** ===== (0) | 2022.07.13 |
| 제어문(IF문) (0) | 2022.07.13 |
| 사용자 정의 함수(Function) (0) | 2022.07.12 |