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)
                                FROM generate_series(1、$ 1))、
                       '')
$$ LANGUAGE sql;
于 2010-03-28T06:02:18.240 に答える
1

ええ、問題は、変数randomstrを初期化していないことです。そして、何かをnullと連結すると、nullになります

于 2010-03-26T06:31:20.720 に答える