1

我已经编写了以下函数,但是当我运行它时它没有返回任何内容。有人可以帮助确定问题吗?

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;
4

2 回答 2

2

更快的代码可以

创建或替换函数 rstr(int)
返回文本为 $$
SELECT array_to_string(ARRAY(SELECT substring('ABCEFHJKLMNPRTWXY3478' FROM (random()*21)::int + 1 FOR 1)
                                从 generate_series(1,$1)),
                       '')
$$ 语言 sql;
于 2010-03-28T06:02:18.240 回答
1

是的,问题是你还没有初始化你的变量 randomstr。当你用 null 连接一些东西时,你会得到 null

于 2010-03-26T06:31:20.720 回答