2016-08-03 3 views
0

사용자 및 암호로 사용할 임의의 예측 가능한 문자열을 만들기 위해 postgresq에서 함수를 만들려고합니다. 다음 코드 작성 :postgresql의 함수에서 setseed를 사용하는 방법

CREATE OR REPLACE FUNCTION colon.random_user_or_password(integer) 
    RETURNS text AS 
$BODY$ 
DECLARE 
    letras_o_numeros TEXT[]; 
    letras_o_numeros_longitud INT; 
    rand_user_or_pass TEXT; 
    seed REAL; 
BEGIN 
    letras_o_numeros=array['a','b','c','d','e','f','g','h','i','j','k','l','m','o','p','q','r','s','t','u','b','w','x','y','z','A','B','C','D','E', 
          'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9']; 
    letras_o_numeros_longitud=array_length(letras_o_numeros, 1); 
    rand_user_or_pass=''; 
    seed=$1/power(10,ceil(log($1))); 
    setseed(seed); 
    WHILE char_length(rand_user_or_pass)<8 LOOP 
     rand_user_or_pass=rand_user_or_pass||letras_o_numeros[ceil(random()*letras_o_numeros_longitud)]; 
    END LOOP; 
    RETURN rand_user_or_pass; 
END 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
    COST 100; 

을하지만 함수를 만들려고 할 때, 그것은 나에게 다음과 같은 오류를 제공합니다 : 구문 오류 또는 라인 (15)에 곧 나중에 setSeed (씨앗) 근처에이 기능을 사용하는 방법?

답변

1

기능을 그렇게 호출 할 수 없습니다.

perform setseed(seed); 

또는 lehanh 같이 set seed to 0.5;을 사용하면 하나가 당신이 (setseed()의 경우 인) 결과에 대해 걱정하지 않는 경우에 사용 select 또는 PL/pgSQL의의를 사용할 필요가`수행합니다.

관련 문제