使用从序列对象生成的数据库 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 视图的主要内容,如果未能解决你的问题,请参考以下文章