Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Reformatting GUIDs
Vladimir M. Zakharychev wrote:
> Charles Hooper wrote:
> > I wonder if you can look at this from a different direction. What if
> > you use the random number generating capabilities to generate each of
> > the hex numbers between the dashes?
> >
> > For example, the second section of the GUID contains a four character
> > hex number. If you have Oracle provide a hex number between hex 1000
> > and hex FFFF, that would be sufficient to satisfy that portion of the
> > GUID. If you pre-convert the hex numbers to their decimal equivalents,
> > you will save Oracle a little work, but it will be more difficult to
> > see what is happening. For example:
> > SELECT
> >
> > TRIM(TO_CHAR(TRUNC(DBMS_RANDOM.VALUE(TO_NUMBER('1000','XXXX')+1,TO_NUMBER('FFFF','XXXX')+1)),'XXXX'))
> > P2
> > FROM
> > DUAL;
> >
> > P2
> > ==
> > 8FC4
> >
> > 1 ROW SELECTED
> >
> > Extending this approach by sliding the above into an inline view:
> > SELECT
> > P1||'-'||P2 GUID,
> > P1||'-'||P2 GUID_AGAIN
> > FROM
> > (SELECT
> >
> > TRIM(TO_CHAR(TRUNC(DBMS_RANDOM.VALUE(TO_NUMBER('10000000','XXXXXXXX')+1,TO_NUMBER('FFFFFFFF','XXXXXXXX')+1)),'XXXXXXXX'))
> > P1,
> >
> > TRIM(TO_CHAR(TRUNC(DBMS_RANDOM.VALUE(TO_NUMBER('1000','XXXX')+1,TO_NUMBER('FFFF','XXXX')+1)),'XXXX'))
> > P2
> > FROM
> > DUAL);
> >
> > GUID GUID_AGAIN
> > ==============
> > 16C89EF9-734C 16C89EF9-734C
> >
> > Charles Hooper
> > PC Support Specialist
> > K&M Machine-Fabricating, Inc.
>
>
>
>
>
>
>
>values, essentially 15 * 16^31 (or if the first digit can also be a 0, 16^32, or 16 * 16^31).
> Hth,
> Vladimir M. Zakharychev
> N-Networks, makers of Dynamic PSP(tm)
> http://www.dynamicpsp.com
I am not disagreeing with you, but I believe that the random number generator in Oracle can be seeded with the system time. The reason that a GUID is thought to be unique is due to the range of possible
Note that there is nothing stopping the OP from calling sys_guid() five times, each time extracting a different sub-string portion of the value returned. This would allow the OP to retrieve a formatted GUID in a single SQL statement without a PL/SQL function.
Very nice example with the REGEXP_REPLACE function, so far your response is the most efficient, and likely the best solution. Great to see more than one way of solving problems.
Charles Hooper
PC Support Specialist
K&M Machine-Fabricating, Inc.
Received on Wed Dec 20 2006 - 15:28:19 CST