WHEN 'YMD' THEN
v_year := to_char(SYSDATE, 'Y');
v_month := FN_CONVERT_DECIMAL_TO_BASE(to_number(to_char(SYSDATE, 'MM')),32,1);
v_day := FN_CONVERT_DECIMAL_TO_BASE(to_number(to_char(SYSDATE, 'DD')),32,1);
v_str := v_year || v_month || v_day;
WHEN 'YMDD' THEN
v_year := to_char(SYSDATE, 'Y');
v_month := FN_CONVERT_DECIMAL_TO_BASE(to_number(to_char(SYSDATE, 'MM')),16,1);
v_day :=to_char(SYSDATE, 'DD');
FUNCTION FN_CONVERT_DECIMAL_TO_BASE (P_DECIMAL_NUM IN INTEGER, P_DIGITAL_TYPE IN VARCHAR2, P_LEN IN INTEGER) RETURN VARCHAR2
IS v_result_str VARCHAR2 (20) := '0';
v_replace_str VARCHAR2 (8000);
v_baseindex INT := 1;
v_quotient INT := p_decimal_num;
v_digit INT := P_LEN - 1;
v_digit_loop INT := 0;
v_basenumber INT := 0;
v_basebeginnumber INT := 10;
v_decodesql VARCHAR2 (1000);
v_remainder INT := 0;
v_baseloopnumber INT := 0;
v_base_10 VARCHAR2(10) := '0123456789';
v_base_16 VARCHAR2(16) := '0123456789ABCDEF';
v_base_30 VARCHAR2(30) := '0123456789ABCDEFGHJKLMNPQRTWXY';
v_base_32 VARCHAR2(32) := '0123456789ABCDEFGHJKLMNPRSTVWXYZ';
v_base_33 VARCHAR2(33) := '0123456789ABCDEFGHJKLMNPQRSTVWXYZ';
v_base_34 VARCHAR2(34) := '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ';
v_base_36 VARCHAR2(36) := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
v_base_code varchar2(62) := '';
BEGIN
CASE
P_DIGITAL_TYPE WHEN '10' THEN
v_basenumber := LENGTH(v_base_10);
v_base_code := v_base_10;
WHEN '16' THEN
v_basenumber := LENGTH(v_base_16);
v_base_code := v_base_16;
WHEN '30' THEN
v_basenumber := LENGTH(v_base_30);
v_base_code := v_base_30;
WHEN '32' THEN
v_basenumber := LENGTH(v_base_32);
v_base_code := v_base_32;
WHEN '33' THEN
v_basenumber := LENGTH(v_base_33);
v_base_code := v_base_33;
WHEN '34' THEN
v_basenumber := LENGTH(v_base_34);
v_base_code := v_base_34;
WHEN '36' THEN
v_basenumber := LENGTH(v_base_36);
v_base_code := v_base_36;
END CASE;
v_baseloopnumber := v_basenumber - 10;
v_digit_loop := v_digit;
IF v_basenumber = 10
THEN
RETURN LPAD(P_DECIMAL_NUM,P_LEN,'0');
ELSE
v_result_str := LPAD(v_result_str,v_digit,'0');
END IF;
LOOP
v_decodesql := v_decodesql || '''' || v_basebeginnumber || ''',''' || SUBSTR (v_base_code, v_basebeginnumber + 1, 1) || ''',';
v_basebeginnumber := v_basebeginnumber + 1;
v_baseloopnumber := v_baseloopnumber - 1;
EXIT WHEN v_baseloopnumber = 0; END LOOP;
LOOP
v_remainder := MOD (v_quotient, v_basenumber);
EXECUTE IMMEDIATE 'select Decode(' || v_remainder || ' ,' || v_decodesql || v_remainder || ') From dual ' INTO v_replace_str;
v_result_str := SUBSTR (v_result_str, 0, v_digit_loop) || v_replace_str || SUBSTR (v_result_str, v_digit_loop + 2, v_digit - v_digit_loop); v_quotient := FLOOR (v_quotient / v_basenumber); v_digit_loop := v_digit_loop - 1; EXIT WHEN v_digit_loop < 0; END LOOP;
RETURN v_result_str; END FN_CONVERT_DECIMAL_TO_BASE;