我是使用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。
答案 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的经验,也没有尝试过任何类似的东西,但是,对我而言,这应该是合理的。