sql - 试图弄清楚为什么 NewID 函数停止在 Oracle 上工作
问题描述
我过去常常SELECT NEWID() FROM DUAL
生成新的(随机)guid。
但是,今天尝试时出现以下错误:
ORA-00904: "NEWID": 无效标识符
我无法通过谷歌搜索找到此特定错误。所以我猜这个案子一定是这两种情况中的任何一种:
- 我的系统管理员以某种方式阻止了此操作,或者由于某些安装/版本更新问题,Oracle 实例无法找到该功能。
-或者- - Oracle 已停止支持
NEWID()
并希望我们仅SYS_GUID()
用于 Guid 生成。
(如果是,那么我将不得不实现 REGEXP_REPLACE,因为我的系统中的 GUID 是“-”分隔的。
另外 - 我必须更新所有使用 NEWID() 的现有代码)。
任何建议都会有所帮助。谢谢。
解决方案
Oracle 从来没有内置newID
函数。这是 SQL Server 中存在的一个函数,因此完全有可能有人以前创建了一个newID
您习惯调用的自定义函数。该函数是否只是sys_guid
在幕后调用,或者它是否像此实现一样复制 SQL Server 中的 GUID 格式,这是您必须确定的。通常,帮助您将代码从一个数据库引擎迁移到另一个数据库引擎的工具会安装一个函数库,这些函数库在目标数据库中模拟源数据库引擎的内置函数,以使迁移更容易。所以你习惯调用的函数有可能是某个迁移工具安装的。
既然您谈论“版本/安装问题”,我的猜测是您连接到一个新的/不同的数据库,该数据库没有您习惯的功能。如果是这样,您可能只需转到代码工作的先前数据库并将自定义函数的代码复制到新数据库。如果您使用以前工作的同一用户连接到同一个数据库,这意味着有人撤销了您的用户对该函数的访问权限或完全删除了该函数,在这种情况下,您需要与您的 DBA/DevOps 团队交谈看看发生了什么变化以及为什么。
推荐阅读
- java - 延迟Java中的图形移动
- javascript - Travis 无法部署 dist 文件夹
- python - 从 Jupyter 运行时,外部函数返回 DataFrames 但不返回变量
- sap-successfactors - 工作申请的成功因素状态更新
- php - 如何在 Yii 的一个查询中执行选择和计数
- sql - 基于优先级显示的 Oracle SQL 查询
- php - Laravel Eloquent:获取相关表的值而不是外键
- c# - 如何在 MySqlConnection 中为服务 WCF 的用户隐藏密码
- python - python中的count方法不能忽略空字符串
- dynamics-crm - 无需更改功能区即可导入解决方案