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

Trying to figure why NewID function stopped working on Oracle

我过去曾使用 SELECT NEWID() FROM DUAL 生成新的(随机)guid。
但是,今天尝试时出现以下错误:

ORA-00904: "NEWID": invalid identifier

我无法通过谷歌搜索找到此特定错误。所以我猜 case 一定是这两个中的任何一个:

  1. 要么这被我的系统管理员以某种方式阻止了,要么 Oracle 实例由于某些安装/版本更新问题而无法找到函数。
    -或者-
  2. Oracle 已停止支持 NEWID() 并希望我们仅使用 SYS_GUID() 生成 Guid。
    (如果是,那么我将不得不实施 REGEXP_REPLACE,因为我系统中的 GUID 是“-”分隔的。
    另外 - 我将不得不更新所有使用 NEWID() 的现有代码。

任何建议都会有所帮助。谢谢

Oracle 从来没有内置的 newID 函数。这是 SQL 服务器中存在的函数,因此完全有可能有人之前创建了您习惯于调用的自定义 newID 函数。该函数是否只是在幕后调用 sys_guid,或者它是否像 this implementation 一样复制 SQL 服务器中的 GUID 格式,这是您必须确定的。通常,帮助您将代码从一个数据库引擎迁移到另一个数据库引擎的工具会安装一个函数库,这些函数库模拟目标数据库中源数据库引擎的内置函数,以使迁移更容易。所以有可能是你习惯调用的函数被一些迁移工具安装了

既然你谈到了“版本/安装问题”,我猜你连接到一个新的/不同的数据库,它没有你习惯的功能。如果是这样,您可能只需转到代码运行的先前数据库,并将自定义函数的代码复制到新数据库。如果您使用以前工作过的同一用户连接到同一数据库,则意味着有人撤销了您的用户对该功能的访问权限或完全删除了该功能,在这种情况下您需要与您的 DBA/DevOps 团队交谈看看发生了什么变化以及为什么。