2012-03-19 63 views
1

我可以使用数据库生成的主键创建Oracle“视图”吗?使用序列对象中的数据库生成的ID创建Oracle视图

我想创建一个视图,其ID是一个来自Sequence对象的DB生成的ID。

+4

视图就是一个SQL语句 - 你想每次运行对视图的查询时间坚持相同的ID?如果是这样的话 - 那么你需要先将这个值存储在一个表中。 – Randy 2012-03-19 21:40:16

回答

3

你不能做到这些,但你可以做这样的事情:

select rownum, field1, field2 
    from... 

的ROWNUM是持有正是一个aoutogenerated领域,但它分配在订购之前的记录,所以如果你有一个ORDER BY子句,那么你就必须做到这一点:

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

正如Randy已经提到的那样,如果您希望项目始终具有相同的ID,则需要将ID保留在表中。这将根据数据库的当前内容简单地分配数字。将它与主键进行比较是非常具有误导性的。 – 2012-03-19 23:36:51

+0

我遇到了这个需求,因为我使用Hibernate作为我的ORM,并且Hibernate需要任何实体的ID(主键),在这种情况下,实体就是视图。 – mandy 2012-03-20 02:18:51

+0

@mandy - 但关键必须持久,对吧?并且该键将用于执行视图中的“UPDATE”行。在视图中生成密钥会使这两个目的失败。 – 2012-03-20 02:29:21