Frage

Ich habe die folgende Funktion geschrieben, aber es gibt nichts zurück, wenn ich sie ausführe. Kann jemand dazu beitragen, das Problem zu identifizieren?

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;
War es hilfreich?

Lösung

Ja, das Problem ist, dass Sie Ihre variable Randomstr nicht initialisiert haben. Und wenn Sie etwas mit Null begleiten, bekommen Sie Null

Andere Tipps

Schnellerer Code kann sein

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top