42 lines
1.4 KiB
SQL
42 lines
1.4 KiB
SQL
create or replace FUNCTION fnc_26ai_default_password RETURN VARCHAR2 IS
|
|
v_letras VARCHAR2(52) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
v_numeros VARCHAR2(10) := '0123456789';
|
|
v_especiais VARCHAR2(20) := '@#$';
|
|
v_senha VARCHAR2(50);
|
|
v_final VARCHAR2(50);
|
|
|
|
-- Função interna para embaralhar caracteres
|
|
FUNCTION shuffle(p_str VARCHAR2) RETURN VARCHAR2 IS
|
|
v_tmp VARCHAR2(200);
|
|
v_idx PLS_INTEGER;
|
|
v_src VARCHAR2(200) := p_str;
|
|
BEGIN
|
|
WHILE LENGTH(v_src) > 0 LOOP
|
|
v_idx := DBMS_RANDOM.VALUE(1, LENGTH(v_src)+1);
|
|
v_tmp := v_tmp || SUBSTR(v_src, v_idx, 1);
|
|
v_src := SUBSTR(v_src, 1, v_idx-1) || SUBSTR(v_src, v_idx+1);
|
|
END LOOP;
|
|
RETURN v_tmp;
|
|
END;
|
|
BEGIN
|
|
DBMS_RANDOM.INITIALIZE(TRUNC(DBMS_RANDOM.VALUE * 100000));
|
|
|
|
-- 4 letras
|
|
FOR i IN 1..4 LOOP
|
|
v_senha := v_senha || SUBSTR(v_letras, TRUNC(DBMS_RANDOM.VALUE(1, LENGTH(v_letras)+1)), 1);
|
|
END LOOP;
|
|
|
|
-- 2 números
|
|
FOR i IN 1..2 LOOP
|
|
v_senha := v_senha || SUBSTR(v_numeros, TRUNC(DBMS_RANDOM.VALUE(1, LENGTH(v_numeros)+1)), 1);
|
|
END LOOP;
|
|
|
|
-- 1 especial
|
|
v_senha := v_senha || SUBSTR(v_especiais, TRUNC(DBMS_RANDOM.VALUE(1, LENGTH(v_especiais)+1)), 1);
|
|
|
|
-- Embaralhar tudo
|
|
v_final := shuffle(v_senha);
|
|
|
|
RETURN v_final;
|
|
END;
|
|
/ |