Функция plpgsql для генерации случайных читаемых строк - PullRequest
1 голос
/ 26 марта 2010

Я написал следующую функцию, но она ничего не возвращает при запуске. Может кто-нибудь помочь определить проблему?

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;

Ответы [ 2 ]

2 голосов
/ 28 марта 2010

более быстрый код может быть

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;
1 голос
/ 26 марта 2010

Да, проблема в том, что вы не инициализировали свою переменную randomstr. И когда вы объединяете что-то с нулем, вы получаете нуль

...