首页 > 解决方案 > 试图弄清楚为什么 NewID 函数停止在 Oracle 上工作

问题描述

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

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

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

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

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

标签: sqloracleora-00904newid

解决方案


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

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


推荐阅读