Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle SQL中列出架构中的所有表?_Sql_Oracle - Fatal编程技术网

如何在Oracle SQL中列出架构中的所有表?

如何在Oracle SQL中列出架构中的所有表?,sql,oracle,Sql,Oracle,如何在Oracle SQL中列出架构中的所有表?您可以查询用户表 试试这个,换一个?使用您的模式名称 select TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =? AND TABLE_TYPE = 'BASE TABLE' 查看my以显示有关db模式的一些信息。它基于:如果您使用JDBC Java访问Oracle,则可以使用类。如果您使用ADO.NET访问Oracle,则可以使用类似的方法 如果您使用ODB

如何在Oracle SQL中列出架构中的所有表?

您可以查询用户表


试试这个,换一个?使用您的模式名称

select TABLE_NAME from  INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA =?
  AND TABLE_TYPE = 'BASE TABLE'

查看my以显示有关db模式的一些信息。它基于:

如果您使用JDBC Java访问Oracle,则可以使用类。如果您使用ADO.NET访问Oracle,则可以使用类似的方法


如果您使用ODBC访问Oracle,则可以使用函数

否则,如果您只需要SQLPlus或类似的Oracle客户机中的信息,可以使用前面提到的查询之一。例如:

select TABLE_NAME from user_tables

要查看其他架构中的所有表,您需要具有以下一个或多个系统权限:

SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
或者是大锤子,DBA的角色

使用其中任一选项,您可以选择:

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM DBA_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'
如果没有这些系统权限,您只能查看被授予某种级别访问权限的表,无论是直接访问还是通过角色访问

SELECT DISTINCT OWNER, OBJECT_NAME 
  FROM ALL_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
   AND OWNER = '[some other schema]'
最后,您可以随时查询数据字典以查找您自己的表,因为从10g开始,您对表的权限无法撤销:

SELECT DISTINCT OBJECT_NAME 
  FROM USER_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'

如果您在没有DBA许可的情况下以普通用户身份登录,则可以使用以下命令查看您自己的模式的所有表和视图

select * from tab;
它将显示用户目录的模式cat同义词中的所有表

select TABLE_NAME from user_tables;
上述查询将为您提供该用户中存在的所有表的名称

select * from user_tables;

显示所有表格

如果您还需要获得表格的大小,这将非常方便:


选择段名称、分区名称、用户段字节,其中段类型为“表”按1排序

从所有表中选择表名称、所有者,其中所有者为“模式名称”,按表名称排序

表的名称和所有者模式下所有表的行计数器:


从DBA_表中选择表名、num_行计数器,其中owner='owner'

如果知道所有者名称,可以直接运行第二个查询

-首先,您可以选择存在的所有所有者:

SELECT DISTINCT(owner) from SYS.ALL_TABLES;
-然后,您可以看到该所有者的以下表格:

SELECT table_name, owner from all_tables where owner like ('%XYZ%');

这是架构中的所有表,而不是架构中的所有表。另外,*_TABLES数据字典视图DBA_TABLES、ALL_TABLES、USER_TABLES include view.replace include view with can include view in seme版本的Oracle。@Adam Musch使用Oracle 10g R2进行测试,它没有返回视图。这更不区分数据库,因此我认为这种解决方案比其他解决方案更好。我认为信息模式适用于我所见过的几乎所有主要数据库。虽然有些人在你能得到的信息方面有所不同,但至少这是一个一致的地方。然而,通过快速的互联网搜索,Oracle似乎是唯一一个不支持信息模式的数据库,尽管它是SQL-92标准的一部分。除了使用%\u对象而不是%\u表之外,最完整的答案是。我记得在9i中,视图将列在%\u表中-例如,尝试自动清空模式会导致诸如DROP TABLE REALY\u a\u VIEW CASCADE约束之类的语句抛出错误。因此,您要么删除带有减号/不在/不存在的视图,要么重新添加%\u对象。另外,与%\u对象对抗会留下一个诱人的暗示,暗示其中可能还有什么!查询中绝对不需要使用DISTINCT。owner,object_name在所有_objects中都是唯一的,这些查询不需要区分,这是真的;但是,所有者、对象名称在dba_对象中无论如何都不是唯一的;包体和包都出现在该视图中,表和索引位于不同的名称空间中。最后一个查询不会像XE 11.2中那样工作。“user\u objects”中似乎没有“owner”列。如果由YOURSCHEMA运行或由具有Adam Musch所述权限的用户运行,则这将仅显示YOURSCHEMA中的所有表。否则,它只会显示模式中授予我们特权的表。
select * from user_tables;
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
SELECT table_name, owner from all_tables where owner like ('%XYZ%');