Oracle 获取DBA_用户信息

Oracle 获取DBA_用户信息,oracle,plsql,database-administration,oracle12c,Oracle,Plsql,Database Administration,Oracle12c,我正在尝试从DBA_用户检索用户id,就像我们在DBA_角色中所做的那样 我试图从DBA_角色检索ROWID列,但收到以下警告: ORA-01445:无法从没有键保留表的联接视图或示例中选择ROWID 据我所知,DBA_用户是Oracle生成的视图,无法检索此ROWID。我说得对吗 如果这是正确的,我如何知道该视图是从哪些表生成的?或者如何知道用户的ROWID 亲切的问候 萨姆 我正在尝试从DBA_用户检索用户id 您正在寻找: 我试着检索ROWID专栏 在这里没什么事可做。这些是指向行物理存储

我正在尝试从DBA_用户检索用户id,就像我们在DBA_角色中所做的那样

我试图从DBA_角色检索ROWID列,但收到以下警告:

ORA-01445:无法从没有键保留表的联接视图或示例中选择ROWID

据我所知,DBA_用户是Oracle生成的视图,无法检索此ROWID。我说得对吗

如果这是正确的,我如何知道该视图是从哪些表生成的?或者如何知道用户的ROWID

亲切的问候

萨姆

我正在尝试从DBA_用户检索用户id

您正在寻找:

我试着检索ROWID专栏

在这里没什么事可做。这些是指向行物理存储的指针。在某些特定条件下,它们可能会发生变化。由于视图没有物理存储,因此ROWID对它们来说毫无意义-因此出现错误ORA-01445:

从oraerr: ORA-01445:无法从联接中选择ROWID 不带键保留表的视图

原因:SELECT语句试图从视图中选择行ID 从联接操作派生。因为在视图中选择了行 与基础物理记录不对应,无法创建任何rowid 返回

操作:从视图选择子句中删除ROWID,然后重新执行 声明

我正在尝试从DBA_用户检索用户id

您正在寻找:

我试着检索ROWID专栏

在这里没什么事可做。这些是指向行物理存储的指针。在某些特定条件下,它们可能会发生变化。由于视图没有物理存储,因此ROWID对它们来说毫无意义-因此出现错误ORA-01445:

从oraerr: ORA-01445:无法从联接中选择ROWID 不带键保留表的视图

原因:SELECT语句试图从视图中选择行ID 从联接操作派生。因为在视图中选择了行 与基础物理记录不对应,无法创建任何rowid 返回

操作:从视图选择子句中删除ROWID,然后重新执行 声明


Sylvain说的是rownum而不是rowid。rownum是一个序列号,而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可能很有用。您可以说rowid=。。。或者在其他情况下,您希望引用已有的行。我相信这是进入一排最快的方式


但是我不明白为什么在查询中需要rowid。

Sylvain所说的是rownum而不是rowid。rownum是一个序列号,而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可能很有用。您可以说rowid=。。。或者在其他情况下,您希望引用已有的行。我相信这是进入一排最快的方式


但是我不明白为什么在查询中需要rowid。

DBA\u用户是一个视图,一个由几个表上的查询组成的视图

ORA-01445意味着Oracle无法检索您请求的ROWID,因为您需要直接查询相关表,或者更改视图SQL并同时查询ROWID以获取相关ROWID,不用说,如果您的视图是通过连接两个表创建的,Oracle如何确定您想要哪个ROWID

DBA_用户从sys.USER$table中获取数据的主表

要获得ROWID,首先看看DBA_用户背后的SQL,在大多数ide上,了解除了ROWID之外要查询哪些数据非常简单

然后您可以只查询:

select ROWID, USER# user_id, NAME username
from sys.USER$;
或者你需要的任何其他专栏


祝你好运

DBA_USERS是一个视图,该视图由几个表上的查询组成

ORA-01445意味着Oracle无法检索您请求的ROWID,因为您需要直接查询相关表,或者更改视图SQL并同时查询ROWID以获取相关ROWID,不用说,如果您的视图是通过连接两个表创建的,Oracle如何确定您想要哪个ROWID

DBA_用户从sys.USER$table中获取数据的主表

要获得ROWID,首先看看DBA_用户背后的SQL,在大多数ide上,了解除了ROWID之外要查询哪些数据非常简单

然后您可以只查询:

select ROWID, USER# user_id, NAME username
from sys.USER$;
或者你需要的任何其他专栏


祝你好运

您正在寻找一个不存在的字段。下面是DBA_用户中可用的字段列表,您正在查找一个不存在的字段。下面是DBA_用户可用的字段列表,感谢您指出我的愚蠢错误。我已经编辑了我的答案来纠正这个错误。谢谢你指出我愚蠢的错误。我编辑了我的答案来纠正这个问题。