SQL 如何查询指定架构中所有表(或视图)的名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 如何查询指定架构中所有表(或视图)的名称相关的知识,希望对你有一定的参考价值。
1、打开并登录sql查询分析器,如下图所示。
2、在查询分析器,输入并运行以下代码,查询出相应的视图表有哪些:USE pubs (或具体的数据库名,在此笔者以pubs为例)select * from sysobjects where xtype='V' 。
3、根据以上所查询出来的视图表名称(name字段),在查询分析器运中,运行以下代码:select * from titleview(视图名)。
4、所显示的查询结果即为视图表的内容了,如下图所示。
5、如果,要查看视图表的定义,可以使用 sp_helptext [ @objname = ] 'name' 来进行查询;比如,查询分析器,输入并运行以下代码:sp_helptext titleview。
6、执行视图定义查询代码段后,所显示的查询结果即为视图表定义。
参考技术A SQL Server 2005:架构dbo的所有表
select t.[name] as tablename, s.[name] as [schema] from sys.tables as t,sys.schemas as s where t.schema_id = s.schema_id
and s.[name] = 'dbo'
架构dbo的所有视图
select v.[name] as viewname, s.[name] as [schema] from sys.views as v,sys.schemas as s where v.schema_id = s.schema_id
and s.[name] = 'dbo'本回答被提问者采纳 参考技术B 张表里,一个DL_ID做主键,其余做外键
各个大类的症状独立建表,比如大类A,有症状a,b,c,d……,其中abcd放到同一张表里;大类B,有症状e,f,g,h……,其中efgh放到另外一张表里。
判断的话,输入症状,遍历各个表单,将符合的表单隐式返回表单对应的大类名称;设置变量I1,I2,I3……与各个大类的症状表单对应,症状表单中有一项与输入症状符合,I+=1;进行排序,I最高在上边,输出前三项,标注第一项(毕竟是机器判断,多输出两项做下参考。)。 参考技术C 查询所有表:select * from objects
如何在 Oracle SQL 中列出模式中的所有表?
【中文标题】如何在 Oracle SQL 中列出模式中的所有表?【英文标题】:How do I list all tables in a schema in Oracle SQL? 【发布时间】:2011-01-15 21:08:09 【问题描述】:如何在 Oracle SQL 中列出一个模式中的所有表?
【问题讨论】:
【参考方案1】:您可以查询USER_TABLES
select TABLE_NAME from user_tables
【讨论】:
这是您的架构中的所有表,而不是 A 架构中的所有表。此外,*_TABLES 数据字典视图(DBA_TABLES、ALL_TABLES、USER_TABLES)包括视图。 将“包含视图”替换为“可以在 Oracle 的 Seme 版本中包含视图”。 @Adam Musch 使用 Oracle 10g R2 测试,未返回视图。【参考方案2】:试试这个,替换 ?使用您的架构名称
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
【讨论】:
这与数据库无关,因此我认为这种类型的解决方案优于所有替代方案。我认为 INFORMATION_SCHEMA 几乎适用于我见过的所有主要数据库。尽管您可以获取的信息有些不同,但至少这是一个一致的地方。然而,通过快速的互联网搜索,Oracle 似乎是唯一一个不支持 Information_Schema 的数据库,尽管它是 SQL-92 标准的一部分。【参考方案3】:查看我的simple utility 以显示有关数据库架构的一些信息。它基于:Reverse Engineering a Data Model Using the Oracle Data Dictionary
【讨论】:
【参考方案4】:SELECT table_name from all_tables where owner = 'YOURSCHEMA';
【讨论】:
这将仅显示 YOURSCHEMA 中的 所有 表,前提是由 YOURSCHEMA 运行或由具有 Adam Musch 提到的权限的用户运行。否则,它只会显示 YOURSCHEMA 中我们被授予权限的表。【参考方案5】:如果您使用 JDBC (Java) 访问 Oracle,您可以使用 DatabaseMetadata 类。如果您使用 ADO.NET 访问 Oracle,则可以使用类似的方法。
如果您使用 ODBC 访问 Oracle,则可以使用 SQLTables 函数。
否则,如果您只需要 SQLPlus 或类似 Oracle 客户端中的信息,已经提到的查询之一就可以了。例如:
select TABLE_NAME from user_tables
【讨论】:
【参考方案6】:要查看另一个架构中的所有表,您需要拥有以下一项或多项系统权限:
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'
【讨论】:
除了使用%_OBJECTS
而不是%_TABLES
之外的“最完整的答案”。
我记得在 9i 中,视图将列在 %_TABLES 中——因此,例如,尝试自动清空模式最终会导致 DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS 之类的语句抛出错误。因此,您要么必须删除带有 MINUS / NOT IN / NOT EXISTS 的视图,要么再次使用 %_OBJECTS。另外,与 %_OBJECTS 对抗会留下一个诱人的暗示,暗示其中可能还有什么!
查询中绝对不需要DISTINCT
。 owner, object_name
在 ALL_OBJECTS
中是唯一的
那些查询不需要区分,这是真的;但是,owner, object_name
在 dba_objects 中无论如何都不是唯一的;包体和包都出现在该视图中,表和索引位于不同的命名空间中。
最后一个查询不会像在 XE 11.2 中那样工作。 “user_objects”中似乎没有“所有者”列。【参考方案7】:
如果您在没有 DBA 权限的情况下以普通用户身份登录,您可以使用以下命令查看您自己的架构的所有表和视图。
select * from tab;
【讨论】:
【参考方案8】:select * from cat;
它将显示您的模式中的所有表 cat 同义词 user_catalog
【讨论】:
【参考方案9】:select TABLE_NAME from user_tables;
以上查询将为您提供该用户中存在的所有表的名称;
【讨论】:
【参考方案10】:select * from user_tables;
(显示所有表格)
【讨论】:
【参考方案11】:如果您还需要获取表格的大小,这将很方便:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
【讨论】:
【参考方案12】:SELECT table_name, owner FROM all_tables where owner='schema_name' order by table_name
【讨论】:
【参考方案13】:OWNER
架构下所有表的表名和行计数器:
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
【讨论】:
【参考方案14】:如果您知道所有者名称,则可以直接运行第二个查询。
--首先你可以选择所有存在的OWNERS:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
--那么你就可以看到那个所有者下的表格了:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
【讨论】:
以上是关于SQL 如何查询指定架构中所有表(或视图)的名称的主要内容,如果未能解决你的问题,请参考以下文章