Join / Log in
Posted by: Serge RielauDB2 provides several means to generate unique identifiers depending on ones need.For example:
CREATE TABLE emp(empid INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, name VARCHAR(20), salary DECIMAL(10, 2));INSERT INTO emp VALUES(DEFAULT, 'Jones', 20000);VALUES IDENTITY_VAL_LOCAL();1--------------------------------- 1. 1 record(s) selected.
CREATE SEQUENCE seq1 AS INTEGER;VALUES NEXT VALUE FOR seq1;1----------- 1 1 record(s) selected.
VALUES GENERATE_UNIQUE();1-----------------------------x'20101110052559155343000000' 1 record(s) selected.
import java.util.UUID; // for UUID class public class UUIDUDF{ public static String randomUUID() { return UUID.randomUUID().toString(); }}
javac UUIDUDF.java
jar cvf UUIDUDF.jar UUIDUDF.class
db2 -t
connect to <dbname>
call sqlj.install_jar('file:.\UUIDUDF.jar', 'UUIDUDFJAR')
CREATE OR REPLACE FUNCTION RANDOMUUID() RETURNS VARCHAR(36) LANGUAGE JAVA PARAMETER STYLE JAVA NOT DETERMINISTIC NO EXTERNAL ACTION NO SQL EXTERNAL NAME 'UUIDUDFJAR:UUIDUDF.randomUUID' ;
VALUES RANDOMUUID();1------------------------------------aa0058ed-bcca-4ead-a22f-b648ccb66787 1 record(s) selected.
VALUES VARCHAR_BIT_FORMAT(RANDOMUUID(), 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');1-------------------------------------------------------------------------------------x'57E71F89F093428DB696A9FEB6785853' 1 record(s) selected.
VALUES VARCHAR_BIT_FORMAT(RANDOMUUID(), 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');1-------------------------------------------------------------------------------------x'57E71F89F093428DB696A9FEB6785853'
1 record(s) selected.
CREATE OR REPLACE FUNCTION SYS_GUID() RETURNS CHAR(16) FOR BIT DATA CONTAINS SQL NOT DETERMINISTIC NO EXTERNAL ACTION RETURN VARCHAR_BIT_FORMAT(RANDOMUUID(), 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');VALUES SYS_GUID(); 1-----------------------------------x'A6F0F1FFF93B4CF8A9C4E990774D9B70' 1 record(s) selected.
CREATE TABLE license(key CHAR(16) FOR BIT DATA NOT NULL PRIMARY KEY, customername VARCHAR(20), product VARCHAR(20));CREATE OR REPLACE TRIGGER license_bi BEFORE INSERT ON license REFERENCING NEW AS n FOR EACH ROW SET n.key = SYS_GUID(); SELECT key FROM NEW TABLE(INSERT INTO license(customername, product) VALUES('Oracle', 'DB2'));KEY-----------------------------------x'A944FBAA5611459EBB9C7FCEC7F65FDE' 1 record(s) selected.