如何仅列出我在Oracle SQL中创建的表?

时间:2018-05-24 11:54:33

标签: sql oracle datatables

我是使用SQL Plus的初学者,所以这听起来像是一个愚蠢的问题,但我真的不知道该怎么做。我找不到查看我创建的所有表格的方法。我尝试了大量的命令,比如

SELECT owner, table_name
  FROM dba_tables`

SELECT table_name
  FROM user_tables

但我总是以几千个结果结束。 Pic after executing the first command

SELECT owner, table_name
  FROM dba_tables

自从我开始使用SQL Plus以来,基本上我创建了大约15个表,我忘了一些名字。我想有办法只检查我创建的表,而没有几千个不必要的其他名称。 有谁知道怎么做?我将补充说我正在使用SYSTEM用户和oracle express。

3 个答案:

答案 0 :(得分:2)

首先,您应该停止使用SYSTEM帐户。这仅适用于Oracle数据库。创建并使用一个新的数据库用户,你会比现在的更糟糕。[/ p>

要解决当前问题,您需要过滤掉SYSTEM开箱即用的“数千个表”。 (我接受你的话数千 - 我从未计算过它们。)

一个想法是:

SELECT object_name
FROM   dba_objects
WHERE  object_type = 'TABLE'
AND    owner = 'SYSTEM'
AND    created >= to_date('01-JAN-2018','DD-MON-YYYY')

...将01-JAN-2018替换为您开始使用SQL * Plus的日期,其中希望与数据库的安装不同(或者这可能不起作用)孔)!

答案 1 :(得分:1)

@ matthew-mcpeak上面所说的 - 退出使用系统。

在创建适当的架构以包含对象后,可以查询USER_TABLES。不需要WHERE子句:这是属于您的SESSION用户帐户的模式中TABLES的VIEW。

所以以PETE身份登录,查询

 SELECT * FROM USER_TABLES

将显示PETE模式中的每个表。

select *
  from ALL_OBJECTS
 where OBJECT_TYPE = 'TABLE'
   and OWNER = 'PETE';

或查询

 SELECT * FROM ALL_TABLES where owner = 'PETE'

我们还有DBA_视图,例如DBA_TABLES和DBA_OBJECTS。它们比ALL_视图更快 - 因为没有安全模型。 ALL_视图仅显示您能够看到的内容。因此,如果您有权访问DBA_视图,请使用它们。

但是,如果您只想查看架构中的内容,那么USER_视图就是花花公子。

然而

这不会显示您创建的每个表格。例如,那些用SYSTEM?

污染SYSTEM模式的那些表呢?

Oracle数据字典不会跟踪谁创建了什么。每当触发CREATE TABLE时,您都需要AFTER CREATE TRIGGER来捕获会话所有者,并将其记录到新表以进行报告。或者在您的系统上启用审核并让它来处理它。 ORACLE-BASE(Tim)演示了here

答案 2 :(得分:0)

如果您确实知道您创建的任何表格,请进行如下查询:

select owner,table_name from user_tables where table_name='NAME OF YOUR TABLE';

然后,您可以将查询更改为:

select owner, table_name  from user_tables where ower='THE OWNER OF THE TABLE YOU SELECTED BEFORE'

这应该只返回您创建的表。 owner可能是您的用户名,但是,我不确定,因为我没有Oracle的经验,也没有尝试过任何类似的东西,但是,对我而言,这应该是合理的。