【问题标题】:How get Tables from current Session/User如何从当前会话/用户获取表
【发布时间】:2015-11-26 17:06:28
【问题描述】:

我正在努力获取给定用户名或当前会话/用户的表格; 我可以使用select table_name from all_tables; 获取所有表,但它也检索默认创建的表。我只想要我们创建的表格。

即使当我从 Pluggable 数据库中检索表时,它也会获取所有表(default-tables-with-$-sign-name),但是当我在 ORACLE SQL DEVELOPER 中连接 pluggable-user 时,它只会显示(用户创建的)表没有默认表。

我想要所有显示表的查询,用户没有默认($ 符号名称)表,用户;对于 sqlplus。我正在使用 ORACLE-12C。

【问题讨论】:

  • 只使用 select * from user_tables;
  • 你跑了吗select * from user_tables
  • 系统不是您创建的用户。您应该与普通用户联系,例如 scott(predefined) 或您创建的其他用户。
  • 请不要在您的应用程序/测试/工作中使用 SYS 或 SYSTEM。

标签: oracle oracle12c


【解决方案1】:

只过滤所有者:

select table_name from all_tables where owner='YOUR OWNER NAME';

【讨论】:

  • 显示no row selected 错误。甚至我创建了一张桌子;
  • 你用什么用户? select user from dual; 找到它。
  • 我得到了系统。但它也会检索我未创建的表。 (带有一些 $ 符号名称)即使对于 PDBORCL(Pluggable_databse) 的 SYSTEM 用户和 SCOTT 用户;
【解决方案2】:

您可以根据您拥有的权限查询视图 [DBA|ALL|USER]_TABLES

查询 USER_TABLES 将提供您已登录的当前所有者拥有的所有表。

例如,

SQL> show user
USER is "LALIT"
SQL> SELECT table_name FROM user_tables;

TABLE_NAME
--------------------------------------------------------------------------------

no rows selected

SQL> create table t(a number);

Table created.

SQL> SELECT table_name FROM user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
T

使用 DBA/ALL 时,您必须过滤 UPPER CASE 中的 OWNER

例如,

SQL> show user
USER is "SYS"
SQL> SELECT table_name FROM dba_tables WHERE OWNER='LALIT';

TABLE_NAME
--------------------------------------------------------------------------------
T

【讨论】:

  • 为什么不直接使用user_tables呢?普通用户无论如何都无法访问dba_tables
  • 嗯...更新...希望现在更有意义。
猜你喜欢
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
相关资源
最近更新 更多