set serveroutput on;
declare
check_flg BOOLEAN:= FALSE;
tax_ref PLS_INTEGER;
e_null EXCEPTION;
e_eight_char EXCEPTION;
num_sum PLS_INTEGER:=0;
--邏輯Function
FUNCTION addition(v_index IN PLS_INTEGER,v_num IN PLS_INTEGER) RETURN PLS_INTEGER IS
a_int PLS_INTEGER:=0;
BEGIN
CASE
WHEN v_index = (7) THEN
a_int := v_num * 4;
WHEN v_index in (2,4,6) THEN
a_int := v_num * 2;
ELSE
a_int := v_num;
END CASE;
--return a_int;
RETURN trunc(a_int / 10) + MOD(a_int,10);
END addition;
BEGIN
tax_ref := to_number('86533770');
--空值檢查
IF tax_ref IS NULL THEN
RAISE e_null;
END IF;
--8碼檢查
IF length(tax_ref) <> 8 THEN
RAISE e_eight_char;
END IF;
--邏輯檢查
FOR i IN 1..length(tax_ref) LOOP
num_sum := num_sum + addition(i,substr(tax_ref,i,1));
END LOOP;
if mod(num_sum,10) = 0 then
check_flg := TRUE;
elsif substr(tax_ref,6,1) = 7 then
if mod(num_sum,9) = 0 then
check_flg := TRUE;
end if;
end if;
--顯示是否通過檢查
if check_flg = TRUE then
dbms_output.put_line('True');
else
dbms_output.put_line('False');
end if;
--例外處理
EXCEPTION
WHEN e_null THEN
dbms_output.put_line('空值');
WHEN e_eight_char THEN
dbms_output.put_line('並非8碼數字');
WHEN OTHERS THEN
dbms_output.put_line('錯誤統編');
END;
沒有留言:
張貼留言