CREATE PROCEDURE sp_setseed(n INTEGER) DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1; LET seed = n; END PROCEDURE; CREATE PROCEDURE sp_random() RETURNING INTEGER; DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1; DEFINE d DECIMAL(20,0); LET d = (seed * 1103515245) + 12345; -- MOD function does not handle 20-digit values... Dammit!! LET seed = d - 4294967296 * TRUNC(d / 4294967296); RETURN MOD(TRUNC(seed / 65536), 32768); END PROCEDURE; CREATE FUNCTION sp_randomstring(str VARCHAR(255), num INTEGER) RETURNING VARCHAR(255) AS random_string; DEFINE r VARCHAR(255); DEFINE i INTEGER; DEFINE n INTEGER; DEFINE j INTEGER; LET r = ""; LET n = LENGTH(str); FOR i = 1 TO num LET j = MOD(sp_random(), n) + 1; LET r = r || SUBSTR(str, j, 1); END FOR; RETURN r; END FUNCTION; EXECUTE FUNCTION sp_randomstring("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 20); CREATE FUNCTION generate_random_string_with_prefix(prefix VARCHAR(255), total_length INTEGER) RETURNING VARCHAR(255) AS random_string; DEFINE char_set VARCHAR(255); DEFINE result_string VARCHAR(255); DEFINE random_string VARCHAR(255); DEFINE i INTEGER; DEFINE remaining_length INTEGER; LET char_set = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; LET result_string = prefix; -- Start with the prefix LET remaining_length = total_length - LENGTH(prefix); LET random_string = sp_randomstring(char_set, remaining_length); LET result_string = result_string || random_string; RETURN result_string; END FUNCTION; EXECUTE FUNCTION generate_random_string_with_prefix("ASD", 20);