尝试弄清楚为什么 Oracle 上的 NewID 函数停止工作

5 浏览
0 Comments

尝试弄清楚为什么 Oracle 上的 NewID 函数停止工作

过去我使用SELECT NEWID() FROM DUAL来生成新的(随机的)GUID。

然而,今天当我尝试时出现了以下错误:

ORA-00904: "NEWID": 无效的标识符

我在谷歌上找不到关于这个特定错误的信息。所以我猜测可能是以下两种情况之一:

  1. 可能是我的系统管理员在某种方式下阻止了这个功能,或者Oracle实例由于某些安装/版本更新问题无法找到该函数。

    -或-

  2. Oracle已经停止支持NEWID(),并希望我们只使用SYS_GUID()来生成GUID。

    (如果是这样的话,我将不得不在我的系统中实现一个REGEXP_REPLACE作为GUID的分隔符是'-'。

    此外,我还需要更新所有使用NEWID()的现有代码)。

任何建议都将是有帮助的。谢谢。

0
0 Comments

尽管Oracle没有内建的newID函数,但有可能之前有人创建了一个名为newID的自定义函数。这个自定义函数可能只是在内部调用了sys_guid函数,也有可能是复制了SQL Server中GUID的格式,比如这个实现。通常,帮助将代码从一个数据库引擎迁移到另一个数据库引擎的工具会安装一个函数库,用于在目标数据库中模拟源数据库引擎的内置函数,以便简化迁移过程。所以有可能你习惯调用的函数是由某个迁移工具安装的。

鉴于你提到了“版本/安装问题”,我猜测你正在连接一个新的/不同的数据库,该数据库没有你习惯使用的函数。如果是这样,你可以去之前代码正常工作的数据库,将自定义函数的代码复制到新的数据库中。如果你连接的是相同的数据库并使用相同的用户,而之前的代码却无法工作,那意味着有人撤销了你的用户对该函数的访问权限,或者完全删除了该函数,这种情况下你需要与DBA/ DevOps团队沟通,了解发生了什么变化以及原因。

你是正确的。我确实在某些模式中找到了一个自定义的NewID函数。我使用了sys_guid()和REGEXP_REPLACE的组合来创建以“-”分隔的GUID,这样我就不必依赖自定义函数了。谢谢你的帮助..!

0