我正在尝试为视图的每一行创建一个唯一的标识符。我拥有的视图连接了很多表,因此没有一个表的主键可以帮助我识别行。

在Google搜索中看起来可以通过使用rowid来实现此目的吗?但是我不确定如何引用视图的rowid。以下是我设想的rowid如何工作的示例,但是由于我没有为rowid指定特定的表,因此它显然会失败并显示“歧义列”错误。

例如: 通用标签

我正在尝试在查询而不是存储过程中执行此操作。任何帮助,将不胜感激!

谢谢!

有帮助吗?

解决方案

我的理解是,rowid指的是物理表中的一行,而不是结果集中的一行(实际上是视图)。

要获取每一行的唯一标识符,您需要以某种方式组合要连接的表的主键。

其他提示

如果在所有表上都没有主主键,则可以从各个表中选择行ID并将它们连接起来: 通用标签

不要使用ROWID伪列,它是存储依赖项(使用有用的ENABLE ROW MOVEMENT时可能会改变)。您也不能使用它以有效的方式在视图上查找(合并)记录。

在这种情况下,最好在记录上使用真实的PK(以使索引查找有效)。而且我不会加入它们,而只是使用多列-只有这样,您才能重新选择它们(具有索引支持)。

这个问题现在已经回答了一段时间,但是在添加主键时请小心。 例如,当您具有 key1 = 23 and key2 = 45 并将其隐藏为 2345 时,不清楚密钥是否是 23 and 45 或它们是否是 2 and 345

使用定界符 (23,45 -> 23_45) ,该定界符不能出现在任何键中(并非所有键都是数字键)。或填写密钥以达到最大可能的长度 (23,45 -> 00230045 (for key1 and key2 NUMBER(4,0)))

还请注意Oracle的功能(并非所有DB都可以处理),可以在多个列上定义主键和外键,这可能会更快,并且无需拆分隐式键即可扩展纯联接的可能性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top