Oracle:创建一个带有自动递增id列的视图

10
我创建了一个`view`,可以从不同的表中填充数据。我使用了`10个select语句`,并使用`UNION ALL`组合这些语句的结果。
我想在我的视图中添加`主键列`。因为我需要使用此`视图`中的数据创建`XML`文件。所以我需要一个`主键列`来进行`XML`构建应用程序中的一些处理。
我已经为所有的`select语句`添加了`rownum`。但是它返回了重复的id,因为每个`select语句`中的`rownum`都从1开始。
然后我创建了一个序列,并尝试使用`nextval`。但我不能使用序列,因为我的`select语句`有`group by`和`order by`。
是否有任何方法可以解决这个问题?
1个回答

16
您可以对联合进行选择,例如:
SELECT rownum(),*
FROM (SELECT * FROM tableA UNION ALL SELECT * FROM tableB)

已更新

SELECT rownum, t.*
FROM (SELECT * FROM tableA UNION ALL SELECT * FROM tableB) t

我遇到了一个错误。ORA-00923: FROM 关键字未找到在预期位置 - Bishan
你加了星号吗?你应该放上你的列名,我只是举个例子。 - ryudice
我添加了列名。在不使用 rownum() 的情况下可以正常工作。但是一旦添加了 rownum(),就会出现错误。 - Bishan
1
@Bishan,这些是小的语法错误,请尝试使用 select rownum, t.* from (select ... union all select ...) t - A.B.Cade
@A.B.Cade 如果添加新记录,那么现有记录的行号会改变吗? - Devs love ZenUML
@XiaoPeng-BuilderofZenUML - rownum 只是反映每次查询视图的查询结果。如果你问的是它是否会记住上一次执行的内容,那么答案是否定的。 - William Robertson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接