2016-08-03 6 views
0

Ich versuche eine Funktion in Postgresq zu erstellen, um eine zufällige vorhersagbare Zeichenfolge (als Benutzer und Kennwort) zu erstellen. Ich schrieb den folgenden Code:Wie benutze ich setseed in einer Funktion in postgresql

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; 

aber wenn ich versuche, um die Funktion zu erstellen, es gibt mir die folgende Fehlermeldung: Syntaxfehler bei oder in der Nähe von setseed (Samen) in Zeile 15. Wie diese Funktion verwendet wird?

Antwort

1

Eine Funktion kann nicht so aufgerufen werden. Sie müssen entweder select oder in PL/pgSQL verwenden, wenn Sie nicht über das Ergebnis egal (was der Fall für setseed() ist) verwenden `ausführen:

perform setseed(seed); 

Oder verwenden set seed to 0.5; wie lehanh gezeigt.

Verwandte Themen