The SYS_GUID function returns a 16 octet globally unique
identifier. Applications would use this to provide unique values
from various applications and across databases in an OpenVMS
cluster or network.
This function uses the OpenVMS system service SYS$CREATE_UID.
Applications that call this system service create compatible
values for Rdb.
The returned value from SYS_GUID() may contain octets that
are zero. If returning values to C applications, then Oracle
recommends using the $SQL_VARCHAR pseudo type to avoid C null
terminated string semantics.
The SYS_GUID() returns data using a special character set. This
special character set is used by Oracle Rdb to distinguish this
type of string from others. Interactive SQL will format the value
using standard OpenVMS formatting services when this character
set is seen. Note that these services perform reordering of the
octet values during formatting, that is, the value isn't a direct
hexadecimal representation of the value.
Database administrators can define a domain to be used by
applications which will make it easier to use.
SQL> create domain GUID_DOMAIN
cont> char(16) character set -11;
SQL>
SQL show domain GUID_DOMAIN;
GUID_DOMAIN CHAR(16)
GUID 16 Characters, 16 Octets
SQL>
This domain can be used for column, parameter, and variable
definitions.
To support storing literal GUID values, SQL also supports GUID
literals. The literals follow the standard literal format using
the special prefix _GUID, as shown in the following examples.
SQL> create domain GUID_DOMAIN
cont> char(16) character set -11;
SQL> show domain GUID_DOMAIN;
GUID_DOMAIN CHAR(16)
GUID 16 Characters, 16 Octets
SQL> create table SAMPLE
cont> (a int
cont> ,b GUID_DOMAIN default _guid'00000000-0000-0000-0000-000000000000');
SQL> insert into SAMPLE default values;
1 row inserted
SQL> show table (column) SAMPLE;
Information for table SAMPLE
Columns for table SAMPLE:
Column Name Data Type Domain
----------- --------- ------
A INTEGER
B CHAR(16) GUID_DOMAIN
GUID 16 Characters, 16 Octets
Oracle Rdb default: GUID'00000000-0000-0000-0000-000000000000'
SQL>
The literal can also be used in queries to select existing rows.
SQL> select * from SAMPLE
cont> where b = _guid'3DBB657F-8513-11DF-9B74-0008029189E7';