У меня есть следующий класс, загруженный в DB2 9.7.4 Express-C для генерации идентификаторов для строк
public class Int64UUID {
public static final long dx = 30*386*12*30*24*3600*1000; // starting at 2000 year
public static long lastUUID = System.currentTimeMillis() - dx;
public static synchronized long random(){
long uuid = System.currentTimeMillis() - dx;
while(uuid == lastUUID)
uuid = System.currentTimeMillis() - dx;
lastUUID = uuid;
return uuid;
}
public static void main(String[] args) {
System.out.println(Int64UUID.random());
}
}
и следующая функция для его использования
CREATE FUNCTION "MYSCHEMA"."INT64_GUID" ( )
RETURNS BIGINT
SPECIFIC "SQL110520165927000"
LANGUAGE JAVA
PARAMETER STYLE JAVA
EXTERNAL NAME 'Int64UUID.random'
NOT DETERMINISTIC
NO EXTERNAL ACTION
NO SQL
CALLED ON NULL INPUT
DISALLOW PARALLEL;
Будет ли генерироваться идентификаторыиспользование этих функций уникально для сеансов db2 благодаря синхронизации, и является ли это лучшей альтернативой GENERATED ВСЕГДА КАК ИДЕНТИЧНОСТЬ, я знаю, что срок действия этих идентификаторов истекает в течение следующих 60 лет, но 60 лет - это длительный период