在Oracle数据库管理中,数据字典是非常重要的一个部分,因为它包含了数据库中所有对象的信息,如表格、视图、索引、存储过程等等对象的元数据信息。学习如何建立数据字典对于掌握Oracle数据库管理技能非常重要,本文将向您介绍oracle中学习建立数据字典的方法。
在Oracle中,数据字典是由系统表和视图组成的,这些都是可以查询的。以下是一些查询Oracle数据字典的查询语句:
1.查询表的名称和列名:
SELECT TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = ‘TABLE_NAME_OF_INTEREST’;
2.查询所有的表和列:
SELECT TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLUMNS;
3.查询所有表的名称:
SELECT * FROM TAB;
4.查询一个特定表的列:
DESC TABLE_NAME_OF_INTEREST;
5.查询特定列的信息:
SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = ‘TABLE_NAME_OF_INTEREST’ AND COLUMN_NAME=’COLUMN_NAME_OF_INTEREST’;
以上是一些Oracle查询数据字典的常用语句,接下来将对如何操作Oracle建立数据字典进行介绍。
本文以建立一个数据库元数据信息表为例来说明。该表可以用来存储所有表格、视图、索引、存储过程等对象的元数据信息。
我们需要创建一个新的表:
CREATE TABLE DATABASE_METADATA (
OBJECT_TYPE VARCHAR2(50),
OWNER VARCHAR2(50),
OBJECT_NAME VARCHAR2(50),
SUBOBJECT_NAME VARCHAR2(50),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE_ID NUMBER,
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19),
STATUS VARCHAR2(7),
TEMPORARY VARCHAR2(1),
GENERATED VARCHAR2(1),
SECONDARY VARCHAR2(1),
NAMESPACE NUMBER,
EDITION_NAME VARCHAR2(128),
SHARING VARCHAR2(13),
EDITIONABLE VARCHAR2(1),
ORACLE_MNTNED VARCHAR2(1),
DEFAULT_COLLATION VARCHAR2(100),
DUPLICATED NUMBER
);
这个表包含了我们所需的所有字段,紧接着我们来写一些存储过程或脚本来获取数据并将它们保存在这个表中。
我们要建立一个存储过程或脚本,用于获取所有的表格、视图、索引和存储过程的信息并将它们插入到DATABASE_METADATA的表中。
以下是一个获取表格信息的脚本:
DECLARE
CURSOR c1 IS
SELECT DISTINCT ‘TABLE’ AS OBJECT_TYPE, OWNER, TABLE_NAME, NULL AS SUBOBJECT_NAME, TABLE_ID AS OBJECT_ID, NULL AS DATA_OBJECT_ID, NULL AS OBJECT_TYPE_ID, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY, GENERATED, SECONDARY, NAMESPACE, EDITION_NAME, SHARING, EDITIONABLE, ORACLE_MNTNED, DEFAULT_COLLATION, DUPLICATED FROM ALL_TABLES WHERE OWNER NOT IN (‘SYS’, ‘SYSTEM’);
BEGIN
FOR r1 IN c1 LOOP
INSERT INTO DATABASE_METADATA VALUES(r1.OBJECT_TYPE, r1.OWNER, r1.TABLE_NAME, r1.SUBOBJECT_NAME, r1.OBJECT_ID, r1.DATA_OBJECT_ID, r1.OBJECT_TYPE_ID, r1.CREATED, r1.LAST_DDL_TIME, r1.TIMESTAMP, r1.STATUS, r1.TEMPORARY, r1.GENERATED, r1.SECONDARY, r1.NAMESPACE, r1.EDITION_NAME, r1.SHARING, r1.EDITIONABLE, r1.ORACLE_MNTNED, r1.DEFAULT_COLLATION, r1.DUPLICATED);
END LOOP;
END;
/
以上脚本可以获取所有表格信息。您可以根据需要自由更改它以获取其他对象的信息,如视图和存储过程。
您可以通过查询DATABASE_METADATA的表查询信息。
例如,获取所有表格的名称:
SELECT OBJECT_NAME FROM DATABASE_METADATA WHERE OBJECT_TYPE=’TABLE’;
通过以上这些步骤和代码,您可以成功地建立一个Oracle数据库元数据信息表,在Oracle中学习建立数据字典的过程中,目前流行的一个数据库信息管理开源工具是SchemaSpy,这是一个Java程序,可以生成详细的数据库文档,以HTML格式呈现。SchemaSpy需要先安装Graphviz,然后运行一个Jar文件,指定数据库信息,SchemaSpy就生成了相应的HTML文档,您可以查看以下它生成的具有丰富交互性的matplotlib样式数据字典:
![SchemaSpy](https://i.loli.net/2021/06/05/hn9mbxVkL6Z4U8B.png)
结语
如果您想要学习如何在Oracle中建立数据字典,请从使用数据字典中的一些常用的查询语句开始,然后将它们编写到存储过程或脚本中。在CURSOR和FOR循环中使用这些查询语句,您就可以轻松地将数据字典信息保存到一个表中,这样您就可以轻松快捷地查询数据库中的所有对象信息。SchemaSpy是一个好用的工具,它可以自动分析数据结构,并以图表形式体现出结构关系。这些工具并不是不能替代数据字典,但它们可以使我们的数据库通俗易懂,从而对数据库的处理和维护能更加得心应手。