2010-03-26 51 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