我正试图从DBA_USERS中提取一个用户id,就像我们在DBA_ROLES中所做的那样。
我尝试从DBA_ROLES中撤回ROWID列,但我得到了以下警告:
"ORA-01445:无法在没有密钥保存的表的情况下从联接视图或示例中选择ROWID“
据我所理解,DBA_USERS是一个,不可能检索这个ROWID。我说的对吗?
如果这是正确的,我如何知道这个视图是从哪个表生成的?或者我如何知道用户的ROWID?
亲切的问候!
相同的
发布于 2014-09-24 18:35:12
西尔万所说的是rownum,而不是rowid。行是一个序列号,而rowid表示行的物理位置。
见这里:
0:opal@spmdtz> select rowid, rownum, xxx.* from xxx;
Rowid |rownum|x |y |
------------------------------------
AAAS/3AAGAAAbmYAAA| 1|foo1|foo2|
AAAS/3AAGAAAbmYAAB| 2|bar1|bar2|当您想要更新行时,rowid可能很有用。您可以说是where rowid= ...,或者在其他情况下,您想要引用您已经“拥有”的行。我相信这是进入一行最快的方式。
但我不明白你为什么要在你的查询中用到罗威德。
发布于 2014-12-09 22:00:17
DBA_USERS是一个视图,它由几个表上的查询组成。
ORA-01445意味着Oracle无法检索您请求的ROWID,因为您需要直接查询相关表(或更改视图和查询ROWID )以获得相关的ROWID (不用说,如果您的视图是通过连接几个表创建的-- Oracle如何确定您想要哪个ROWID?)
“主”表DBA_USERS从is sys.USER$表获取数据。
要获得ROWID,首先要查看DBA_USERS后面的SQL (大多数IDE非常简单),以了解除了ROWID之外您想要查询哪些数据。
然后您只需查询:
select ROWID, USER# user_id, NAME username
from sys.USER$;(或您需要的任何其他列)。
祝好运!
https://stackoverflow.com/questions/26021237
复制相似问题