Oracle SQL:在内联视图中出现时,了解SYS_GUID()的行为?

 sawachan_107 发布于 2023-01-15 19:16

这是有问题的示例SQL; SQL应该在任何Oracle DBMS上运行(我运行的是11.2.0.2.0).

注意尽管是在内联视图/ with子句中构建的,但结果集中的UUID值是如何不同的(一个具有898,另一个具有899).在下面你可以看到DBMS_RANDOM.RANDOM()没有这种副作用.

SQL:

WITH data AS (SELECT SYS_GUID () uuid FROM DUAL)
    SELECT uuid, uuid
      FROM data

输出:

UUID                                      UUID_1
F8FCA4B4D8982B55E0440000BEA88F11      F8FCA4B4D8992B55E0440000BEA88F11

在Contrast DBMS_RANDOM中 ,结果是相同的

SQL:

WITH data AS (SELECT DBMS_RANDOM.RANDOM() rand FROM DUAL)
SELECT rand, rand
  FROM data

输出:

RAND    RAND_1
92518726    92518726

更有趣的是我可以通过包含对DBMS_RANDOM.RANDOM的调用来更改行为/稳定sys_guid:

WITH data AS (
        SELECT SYS_GUID () uuid, 
        DBMS_RANDOM.random () rand 
        FROM DUAL)
SELECT uuid a,
       uuid b,
       rand c,
       rand d
  FROM data

稳定SYS_GUID的SQL小提琴:http://sqlfiddle.com/#!4/d41d8/29409

SQL Fiddle显示奇怪的SYS_GUID行为:http://sqlfiddle.com/#!4/d41d8/29411

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有