midrange.com code scratchpad
Name:
GENSYSUUID SQL UDF
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
07/01/2013 06:58:14 am
IP:
Logged
Description:
Generate UUID(16 bytes) to HexString(32 bytes) SQL UDF
Code:
  1.      **
  2.      **  Program . . : GENSYSUUID
  3.      **  Description : Generate UUID(16 bytes) to HexString(32 bytes)
  4.      **  Author  . . : Vengoal Chang
  5.      **  Published . : AS400ePaper
  6.      **  Date  . . . : June 26, 2013
  7.      **
  8.      **
  9.      **
  10.      **  Programmer's notes:
  11.      **
  12.      ** CREATE FUNCTION QGPL.GENSYSUUID ( )
  13.      **  RETURNS CHAR(32)
  14.      **  LANGUAGE RPGLE
  15.      **  SPECIFIC QGPL.GENSYSUUID
  16.      **  NOT DETERMINISTIC
  17.      **  NO SQL
  18.      **  CALLED ON NULL INPUT
  19.      **  EXTERNAL NAME 'QGPL/GENSYSUUID'
  20.      **  PARAMETER STYLE SQL ;
  21.      **
  22.      ** Run STRSQL:
  23.      ** Select GENSYSUUID ( )  from sysIBM.sysdummy1
  24.      **
  25.      ** CREATE TABLE QGPL/LICENSE (
  26.      **            KEYUUID CHAR (32 ) NOT NULL,
  27.      **            CUSTNAME VARCHAR (32 ) NOT NULL WITH DEFAULT,
  28.      **            PRODUCT  VARCHAR (32 ) NOT NULL WITH DEFAULT  )
  29.      **
  30.      ** CREATE TRIGGER QGPL.LICENSE_BI BEFORE INSERT ON QGPL.LICENSE
  31.      **         REFERENCING NEW N FOR EACH ROW MODE DB2ROW
  32.      **         SET N.KETUUID = QGPL.GENSYSUUID();
  33.      **
  34.      ** INSERT INTO license(custname, product) VALUES('Oracle', 'DB2')
  35.      ** select * from qgpl/license
  36.      **
  37.      **
  38.      H Option( *NoSrcStmt ) DftActGrp( *No )
  39.      H Debug
  40.      **
  41.       *
  42.       * MI builtin to create a hex dump of a spot in memory
  43.       *
  44.      D hexdump         PR                  EXTPROC('cvthc')
  45.      D  output                       32A
  46.      D  input                        16A
  47.      D  output_len                   10I 0 value
  48.  
  49.      D HexUUID         S             32A
  50.  
  51.      D UUID_template   Ds
  52.      D  UtBytPrv                     10u 0 Inz( %Size( UUID_template ))
  53.      D  UtBytAvl                     10u 0
  54.      D                                8a   Inz( *Allx'00' )
  55.      D  UUID                         16a
  56.      **
  57.      D GenUuid         PR                  ExtProc('_GENUUID')
  58.      D UUID_template                   *   Value
  59.  
  60.      D pRtnUUID        S             32
  61.      D pRtnUUIDIn      S              5I 0
  62.      D sqlstate        S              5A
  63.      d functname       S            517A   VARYING
  64.      d specname        S            128A   VARYING
  65.      d errormsg        S             70A   VARYING
  66.      **
  67.      C     *Entry        Plist
  68.      C                   Parm                    pRtnUUID
  69.      C                   Parm                    pRtnUUIDIn
  70.      C                   Parm                    sqlstate
  71.      C                   Parm                    functname
  72.      C                   Parm                    specname
  73.      C                   Parm                    errormsg
  74.  
  75.      C                   Callp     GenUuid( %Addr( UUID_template ))
  76.  
  77.      C                   Callp     HexDump( HexUUID :
  78.      C                                      UUID    :
  79.      C                                      %size(HexUUID)
  80.      C                                    )
  81.  
  82.      C                   Eval      pRtnUUID = HexUUID
  83.      C*                  dump
  84.      **
  85.      C                   Return
© 2004-2019 by midrange.com generated in 0.007s valid xhtml & css