Anasayfa / Database / informix / informix generate random string

informix generate random string

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

 

Hakkında ibrahim

İlgili Makaleler

informix var olan bir tabloya serial primary key ekleme

alter table tblname add id integer; create sequence tblname_seq; update tblname set id = tblname_seq.nextval; …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir