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

Posted

技术标签:

【中文标题】试图弄清楚为啥 NewID 函数停止在 Oracle 上工作【英文标题】:Trying to figure why NewID function stopped working on Oracle试图弄清楚为什么 NewID 函数停止在 Oracle 上工作 【发布时间】:2021-08-02 07:51:23 【问题描述】:

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

ORA-00904:“NEWID”:无效标识符

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

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

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

【问题讨论】:

谷歌搜索,似乎 oracle 函数实际上是 sys_guid() ***.com/questions/3037462/… 也许您正在使用已删除或撤销的自定义 UDF。 newid()其实是T-SQL(SQL Server) Oracle 没有 newid() 函数。可能是自定义函数被删除或使用受到限制。 我猜这是从这里复制粘贴的programmersought.com/article/46825150787 感谢大家的帮助..!我确实在一些 Schemas 中找到了一个自定义函数 NewID。傻我。我已经将sys_guid()REGEXP_REPLACE 结合起来创建'-' -separated Guid,所以我不必依赖自定义函数。 【参考方案1】:

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

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

【讨论】:

你是对的。我确实设法在一些模式中找到了一个自定义的 NewID 函数。我已经完成了 sys_guid() 与 REGEXP_REPLACE 的组合来创建'-' -separated Guid,所以我不必依赖自定义函数。感谢您的帮助..!

以上是关于试图弄清楚为啥 NewID 函数停止在 Oracle 上工作的主要内容,如果未能解决你的问题,请参考以下文章

试图弄清楚 MASM 语法

聚合函数在页面刷新时复制 ng-repeat 中的项目。需要弄清楚如何停止重复。 Angularjs Mongodb mongoose

试图弄清楚 cmath.h 如何计算 Trancedental 函数的值。但是函数调用在头文件中似乎是递归的

无法弄清楚为啥我的提交按钮不会提交

为啥不在构造函数中调用可覆盖的方法?

试图弄清楚如何使用列表返回数据框中每一列的平均值