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; /