2010-03-26 53 views
1

我已经写了下面的函数,但它没有返回任何东西,当我运行它。有人可以帮助确定问题吗?plpgsql函数来生成随机可读字符串

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; 

回答

1

是的问题是你还没有初始化你的变量randomstr。而当你与Concat的东西空你得到空

2

更快的代码可以

 
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

这至少是一个数量级的速度更快。 +1 – ealdent 2010-03-30 19:43:31