如何获得数据库中一个表的所有的字段信息 !

本文介绍了如何在SQL Server和Oracle数据库中查询各种数据库对象,包括表、视图、存储过程、函数、触发器等内容,并提供了详细的SQL语句示例。

第一部分:

对于sqlserver 而言:
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的用户表:
USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U'
获取指定数据库的系统表:
USE DBAudit
SELECT sysobjects.name AS tname, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'S'
或者统一使用:
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner, type, sysobjects.id AS id FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'U' OR type = 'S'
注:
sysobjects中type字段类型解释:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
取得列的方法
系统存储过程
USE xxxDatabase
EXEC sp_help xxxTable
或者
USE xxxDatabase
SELECT syscolumns.name AS name, systypes.name AS type FROM syscolumns LEFT JOIN systypes ON syscolumns.xtype = systypes.xtype WHERE syscolumns.id = xxxTableId
这两种方法都可以取得包括视图的列。
取得视图的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的视图:
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'V'
获取指定数据库的视图的内容:
EXEC sp_helptext xxxObject
取得存储过程的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的存储过程或者扩展存储过程:
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'P' OR type = 'X'
获取指定数据库的存储过程或者扩展存储过程的内容:
EXEC sp_helptext xxxObject
无法获取加密的存储过程。扩展存储过程只能得到dll程序名。
取得函数的方法
系统存储过程
USE xxx
EXEC sp_help
或者
获取指定数据库的各种函数(内嵌函数等):
USE DBAudit
SELECT sysobjects.name AS name, sysusers.name AS owner, type FROM sysobjects LEFT JOIN sysusers ON sysobjects.uid = sysusers.uid WHERE type = 'FN' OR type = 'IF' OR type = ‘TF’
获取指定数据库的函数的内容:
EXEC sp_helptext xxxObject
只能获取用户定义的函数内容。
取得触发器的方法
系统存储过程
USE xxx
EXEC sp_helptrigger xxxTable
或者
获取指定数据库的表的触发器:
SELECT sysobj1.name AS name, sysusers.name AS owner FROM sysobjects AS sysobj1 LEFT JOIN sysobjects AS sysobj2 ON sysobj1.parent_obj = sysobj2.id LEFT JOIN sysusers ON sysobj1.uid = sysusers.uid WHERE sysobj1.type = 'TR'AND sysobj2.name = 'xxxTable'
取得索引的方法
系统存储过程
USE xxx
EXEC sp_helpindex xxxTable
用户
系统存储过程
USE xxx
EXEC sp_helpuser
角色
系统存储过程
USE xxx
EXEC sp_helprole

 

第二部分:

对于oracle而言:
ØORACLE只能连接特定数据库,不能自动扫描数据库对象。
ØORACLE表必须用用户来区别,否则表可能重名。
ØORACLE不能区别系统表或者是用户表,因此只能由管理员选择扫描某些特定用户的表。
取得数据库名的方法
只能由用户指定数据库,不能自动扫描到特定数据库服务器上的所有数据库。
取得表的方法
存储数据库表的系统表/视图主要有:
DBA_ALL_TABLES
描述数据库中所有的对象以及相关的表。
ALL_ALL_TABLES
描述数据库中所有的用户可以访问的对象以及相关的表。
USER_ALL_TABLES
描述数据库中当前用户拥有的对象以及相关的表。

DBA_ TABLES
描述数据库中所有相关的表。
ALL_ TABLES
描述数据库中所有的用户可以访问的相关的表。
USER_ TABLES
描述数据库中当前用户拥有的相关的表。

因此,可以从ALL_TABLES中取得隶属于指定用户的表:
SELECT TABLE_NAME FROM SYS.ALL_TABLES WHERE OWNER = 'DBAUDIT';
取得隶属于指定表空间的表:
SELECT TABLE_NAME FROM SYS.ALL_TABLES WHERE TABLESPACE_NAME = 'DBAUDIT';

也可以不指定用户名,从而取得所有的表。
SELECT TABLE_NAME FROM SYS.ALL_TABLES;
取得列的方法
存储数据库表的列属性的系统表/视图主要有:
DBA_TAB_COLUMNS
描述数据库中所有的表的列属性。
ALL_TAB_COLUMNS
描述数据库中所有的用户可以访问的表的列属性。
USER_TAB_COLUMNS
描述数据库中当前用户拥有的表的列属性。
ALL_TAB_COLS
描述数据库中所有的用户可以访问的表的列属性。

因此,可以从ALL_TAB_COLUMNS中取得隶属于指定用户的表:
SELECT COLUMN_NAME FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME = 'TASK' AND OWNER = 'DBAUDIT';
取得视图的方法
存储数据库视图的系统表/视图主要有:
DBA_VIEWS
描述数据库中所有的视图的属性。
ALL_VIEWS
描述数据库中所有的用户可以访问的视图的属性。
USER_VIEWS
描述数据库中所有的当前用户拥有视图的属性。

因此,可以从ALL_VIEWS中取得隶属于指定用户的视图:
SELECT VIEW_NAME FROM SYS.ALL_VIEWS WHERE OWNER = 'DBAUDIT';
取得存储过程的方法
存储系统对象的系统表/视图有:
DBA_OBJECTS
描述数据库中所有的对象。
ALL_OBJECTS
描述数据库中所有的可以访问的对象。
USER_OBJECTS
描述数据库中所有的当前用户拥有的对象。
SYS_OBJECTS
描述数据库中所有的系统对象。?

对象类型有:
CONSUMER GROUP
CONTEXT
DIRECTORY
FUNCTION
INDEX
INDEX PARTITION
INDEXTYPE
JAVA CLASS
JAVA DATA
JAVA RESOURCE
JAVA SOURCE
LIBRARY
LOB
MATERIALIZED VIEW
OPERATOR
PACKAGE
PACKAGE BODY
PROCEDURE
QUEUE
SEQUENCE
SYNONYM
TABLE
TABLE PARTITION
TRIGGER
TYPE
TYPE BODY
VIEW

因此,取得存储过程可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PROCEDURE';
取得隶属于某个用户的存储过程可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PROCEDURE' AND OWNER = ‘DBAUDIT’;

同样,取得其他的对象也可以用这个方法,包括表,视图等。
取得存储过程内容的方法
对象类型为类型、类型体、过程、函数、包、包体,JAVA源代码的所有对象的源代码都存储在几个系统表/视图中:
DBA_SOURCE
存储所有数据库对象的源代码。
ALL_SOURCE
存储所有可以访问的数据库对象的源代码。
USER_SOURCE
存储所有当前用户拥有的数据库对象的源代码。

因此,取得存储过程源代码的方法:
SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = ‘XXX’ AND TYPE = ‘PROCEDURE’;
取得函数的方法
同上,取得函数可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION';
取得隶属于某个用户的函数可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION' AND OWNER = 'DBAUDIT';

取得函数内容可以用:
SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'FUNCTION';
取得触发器的方法
存储数据库触发器的系统表/视图主要有:
DBA_TRIGGERS
描述数据库中所有的触发器的属性。
ALL_ TRIGGERS
描述数据库中所有的用户可以访问的触发器的属性。
USER_ TRIGGERS
描述数据库中所有的当前用户拥有触发器的属性。

因此,可以从ALL_ TRIGGERS中取得隶属于指定用户的触发器:
SELECT TRIGGER_NAME FROM SYS.ALL_TRIGGERS WHERE OWNER = 'DBAUDIT';

取得触发器内容的方法:
SELECT TRIGGER_BODY FROM SYS.ALL_TRIGGERS WHERE TRIGGER_NAME = 'XXX';
取得索引的方法
存储数据库索引的系统表/视图主要有:
DBA_INDEXES
描述数据库中所有的索引的属性。
ALL_ INDEXES
描述数据库中所有的用户可以访问的索引的属性。
USER_ INDEXES
描述数据库中所有的当前用户拥有索引的属性。

因此,可以从ALL_ INDEXES中取得隶属于指定用户的索引:
SELECT INDEX_NAME,TABLE_NAME FROM SYS.ALL_INDEXES WHERE OWNER = 'DBAUDIT';

取得索引相关的列的方法:
SELECT COLUMN_NAME FROM SYS.ALL_IND_COLUMNS WHERE INDEX_NAME = 'XXX' AND TABLE_OWNER = 'DBAUDIT';
用户
存储数据库用户的系统表/视图主要有:
DBA_USERS
描述数据库中所有的用户的属性。
ALL_USERS
描述数据库中所有的用户的属性。
USER_USERS
描述数据库中当前用户的属性。

因此,可以从ALL_USERS中取得用户:
SELECT USER_ID, USERNAME FROM SYS.ALL_USERS;
角色
存储角色的表/视图有:
DBA_ROLES
描述数据库中所有角色。

取得角色方法:
SELECT ROLE FROM SYS.DBA_ROLES;
表空间
SELECT TABLESPACE_NAME FROM SYS.DBA_TABLESPACES;
数据文件
SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME FROM SYS.DBA_DATA_FILES;
数据库连接
存储数据库连接的系统表/视图主要有:
DBA_LINKS
描述数据库中所有的连接的属性。
ALL_LINKS
描述数据库中所有的用户可访问的连接的属性。
USER_LINKS
描述数据库中当前用户的连接属性。

因此,可以从DBA_DB_LINKS中取得连接:
SELECT * FROM SYS.DBA_DB_LINKS;

同义词
SELECT * FROM SYS.ALL_SYNONYMS WHERE TABLE_OWNER = 'DBAUDIT';
程序包
取得程序包可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE';
取得隶属于某个用户的程序包可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE' AND OWNER = 'DBAUDIT';

取得程序包内容可以用:
SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'PACKAGE';
程序包体
取得程序包体可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE BODY';
取得隶属于某个用户的程序包可以用:
SELECT OBJECT_NAME FROM SYS.ALL_OBJECTS WHERE OBJECT_TYPE = 'PACKAGE BODY ' AND OWNER = 'DBAUDIT';

取得程序包内容可以用:
SELECT TEXT FROM SYS.ALL_SOURCE WHERE NAME = 'XXX' AND TYPE = 'PACKAGE BODY ';

第三部分:

简单点的还有。
返回所有列名
select name  from syscolumns where id=object_id('表名')
查所有表名
select * from INFORMATION_SCHEMA.TABLES
===================================
sp_tableoption N'MyTable', 'text in row', 'OFF'


 

### 如何在 Hive 数据库中查看某个的特定字段 要在 Hive 数据库中查看某个的特定字段信息或数据,可以通过以下几种方式实现: #### 方法一:使用 `DESCRIBE` 命令查看字段基本信息 通过 `DESCRIBE` 命令可以直接查看目标字段名称及其类型。 例如,在 Hive 提示符下运行如下命令: ```sql hive> DESCRIBE my_table; ``` 这将显示 `my_table` 的所有字段及其对应的 SQL 类型[^1]。 如果需要更详细的元数据信息(如注释、存储格式等),可以使用 `DESCRIBE EXTENDED`: ```sql hive> DESCRIBE EXTENDED my_table; ``` --- #### 方法二:查询具体字段的数据 假设有一个名为 `employee` 的,其中包含多个字段(如 `id`, `name`, `salary`)。如果只想查看某些字段的具体数据,则可以在 `SELECT` 查询中指定这些字段名。例如: ```sql hive> SELECT id, name FROM employee LIMIT 10; ``` 此查询仅提取 `id` 和 `name` 字段的内容,并限制结果显示前 10 条记录[^4]。 --- #### 方法三:利用正则达式筛选符合条件的字段值 当需要查找某字段是否包含特定子串时,可采用多种方法完成匹配操作。以下是四种常见的方式: ##### 使用 `LIKE` 关键字 适用于简单的模式匹配场景。例如,找出名字中含有字母 “i” 的员工记录: ```sql hive> SELECT * FROM employee WHERE name LIKE '%i%'; ``` ##### 调用内置函数 `LOCATE` 定位字符串首次出现的位置。若未找到返回值为零;反之大于零示存在匹配项。实例代码如下所示: ```sql hive> SELECT * FROM employee WHERE LOCATE('i', name) != 0; ``` ##### 应用另一相似功能——`INSTR` 区别在于参数顺序不同而已。同样以上述例子说明其用法: ```sql hive> SELECT INSTR(name, 'i') FROM employee WHERE INSTR(name, 'i') != 0; ``` 每种技术都有各自适用范围,请依据实际需求灵活选用合适的一种或者组合运用它们来满足复杂业务逻辑的要求[^4]。 --- #### 方法四:借助外部工具分析 JSON 类型字段 对于存储为 JSON 格式的特殊字段而言,可能还需要额外编写自定义解析程序才能正确读取出内部嵌套层次下的具体内容。比如下面这个案例展示的就是如何从 Oracle 函数角度出发去处理来自 Hive 的半结构化数据源情况之一[^5]: ```plsql -- 创建获取JSON Key Value的PL/SQL Function CREATE OR REPLACE FUNCTION GET_FROM_JSON(TABLE_ID VARCHAR2, KEY_JSON VARCHAR2) RETURN VARCHAR2 IS ... ... END; -- 测试调用该Function得到对应Key的Value结果集 select GET_FROM_JSON(id,'java') as java from hive_scores; ``` 综上所述,无论是基础的信息检索还是高级的数据挖掘任务都可以依托于强大的Hive Query Language轻松达成目的! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值