2010-03-26 3 views
1

J'ai écrit la fonction suivante mais elle ne retourne rien quand je la lance. Quelqu'un peut-il aider à identifier le problème?Fonction de plpgsql pour générer des chaînes lisibles au hasard

CREATE OR REPLACE FUNCTION GenerateReadableRandomString (
len INT 
) RETURNS varchar AS 
$$ 
DECLARE 
validchars VARCHAR; 
randomstr VARCHAR; 
randint INT; 
i INT; 

BEGIN 

validchars := 'ABCEFHJKLMNPRTWXY3478'; 
i := 0; 

LOOP 
    randint := ceil(random() * char_length(validchars)); 
    randomstr := randomstr || substring(validchars from randint for 1); 
    i := i + 1; 
    EXIT WHEN i = len; 
END LOOP; 

RETURN randomstr; 
END; 
$$ 
LANGUAGE plpgsql; 

Répondre

1

Oui le problème est que vous n'avez pas initialisé votre variable randomstr. Et quand vous concat quelque chose avec vous obtenez null null code plus rapide

2

peut être

 
CREATE OR REPLACE FUNCTION rstr(int) 
RETURNS text AS $$ 
SELECT array_to_string(ARRAY(SELECT substring('ABCEFHJKLMNPRTWXY3478' FROM (random()*21)::int + 1 FOR 1) 
           FROM generate_series(1,$1)), 
         '') 
$$ LANGUAGE sql; 
+0

Ceci est au moins un ordre de grandeur plus rapide. +1 – ealdent