使用从序列对象生成的数据库 ID 创建 Oracle 视图

Posted

技术标签:

【中文标题】使用从序列对象生成的数据库 ID 创建 Oracle 视图【英文标题】:Oracle View Creation with a Database generated ID from a Sequence Object 【发布时间】:2012-03-19 21:35:24 【问题描述】:

我可以使用数据库生成的主键创建一个 oracle“视图”吗?

我想创建一个视图,其 ID 是从 Sequence 对象生成的数据库 ID。

【问题讨论】:

一个 VIEW 只是一个 sql 语句 - 您是否希望每次对视图运行查询时都保留相同的 ID?如果是这样 - 那么您需要先将此值存储在一个表中。 【参考方案1】:

你不能完全这样做,但你可以这样做:

select rownum, field1, field2
  from...

rownum 是一个自动生成的字段,它完全包含它,但它是在排序记录之前分配的,所以如果你有 ORDER BY 子句,那么你必须这样做:

Select rownum, *
  from (select ....
         order by ....)

【讨论】:

正如 Randy 已经提到的,如果您希望项目始终具有相同的 ID,则需要将 ID 保存在表中。这将简单地根据数据库的当前内容动态分配数字。将其与主键进行比较是非常具有误导性的。 我遇到了这个需求,因为我使用 Hibernate 作为我的 ORM,而 Hibernate 需要任何实体的 ID(主键),在这种情况下,实体就是视图。 @mandy - 但是密钥必须是持久的,对吧?并且密钥将用于在视图中执行诸如UPDATE 行之类的操作。在视图中生成密钥会破坏这两个目的。 让我检查更多。感谢您的回复。 @mandy 我不明白你需要一个数据库 ID,我以为你想要一个视图的“自动数字”字段......你的视图应该返回实际的 ID,存储在原表。

以上是关于使用从序列对象生成的数据库 ID 创建 Oracle 视图的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何创建表的自增ID(通过序列)

如何使用顺序 ID 从 Firebase 检索随机对象?

使用 hbm2ddl 创建 ID 和 DB 方案的共享序列生成器

jpa序列ID生成

Java,IDEA使用IDEA自动生成序列化ID

如何正确地将 id 生成器序列与表相关联