plpgsql function to generate random readable strings
-
22-09-2019 - |
Question
I have written the following function but it's isn't returning anything when I run it. Can somebody help identify the issue?
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;
Solution
Yeah the problem is that you haven't initialized your variable randomstr. And when you concat something with null you get null
OTHER TIPS
faster code can be
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;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow