Oracle数据库提供了一组视图 - 统称为数据字典,能够使用SQL 和 PL / SQL语言获取对PL/SQL代码的疑问。
数据字典基础
数据字典由数据库实例创建的众多表和视图组成。用户模式通常对这些表没有特权; Oracle数据库仅授予视图的SELECT访问权限。
大多数数据字典视图有三个版本:
USER视图:有关您所连接的架构所拥有的数据库对象的信息
ALL视图:有关当前连接的模式可以访问的数据库对象的信息
DBA视图:有关数据库实例中所有数据库对象的无限制信息(非DBA模式通常无权查询DBA视图)
USER_ARGUMENTS | 模式中所有过程和函数中的参数(参数)。 |
USER_DEPENDENCIES | 与您拥有的对象的依赖关系。该数据库主要由Oracle数据库使用,以在数据库对象所依赖的对象发生更改时使其无效。 |
USER_ERRORS | 您拥有的所有存储对象(包括触发器)的当前编译错误集。SHOW ERRORS SQL * Plus命令可以访问此视图。但是,您也可以针对它编写自己的查询。 |
USER_IDENTIFIERS | 引入在Oracle数据库11 克和由PL /范围编译器实用程序填充。填充后,此视图会为您提供有关代码库中所有标识符 - 程序名称,变量等的信息。 |
USER_OBJECT_SIZE | 您拥有的对象的大小。实际上,此视图显示了代码的源,解析和编译大小。虽然它主要由编译器和运行时引擎使用,但您可以使用它来识别环境中的大型程序。 |
USER_OBJECTS | 你拥有的对象。例如,您可以使用此视图查看对象是否标记为INVALID,查找名称中包含EMP的所有包,依此类推。 |
USER_PLSQL_OBJECT_SETTINGS | 有关可通过ALTER和SET DDL命令修改的PL / SQL对象的特性(如优化级别和调试设置)的信息。 |
USER_PROCEDURES | 有关存储程序的信息,例如AUTHID设置,程序是否定义为DETERMINISTIC,等等。 |
USER_SOURCE | 您拥有的所有对象的文本源代码(在Oracle9i数据库及更高版本中,包括数据库触发器和Java源代码)。这是一个非常方便的视图,因为您可以使用SQL,特别是Oracle Text对其执行各种源代码分析。 |
USER_STORED_SETTINGS | PL / SQL编译器标志。使用此视图可以发现通过本机编译编译的程序。 |
USER_TRIGGERS和USER_TRIGGER_COLS | 数据库分别触发您自己(包括源代码和触发事件的描述)以及使用触发器标识的任何列。您可以针对USER_TRIGGERS编写程序以启用或禁用特定表的触发器。 |
显示有关存储对象的信息
USER_OBJECTS视图包含架构拥有的每个数据库对象的行。最常用的列是
-
OBJECT_NAME:对象的名称
-
OBJECT_TYPE:对象的类型,例如PACKAGE,FUNCTION或TRIGGER
-
STATUS:对象的VALID或INVALID的状态
-
LAST_DDL_TIME:指示此对象上次更改的时间戳
显示和搜索源代码
您编译到数据库中的所有程序单元源代码都可以通过USER_SOURCE视图访问,该视图的列为
-
NAME:对象的名称
-
TYPE:对象的类型(从PL / SQL程序单元到Java源和触发源)
-
LINE:源代码行的编号
-
TEXT:源代码的文本
存储代码的编译器设置
USER_PLSQL_OBJECT_SETTINGS视图提供有关存储的PL / SQL对象的编译器设置的信息。关键列是
-
PLSQL_OPTIMIZE_LEVEL:用于编译对象的优化级别
-
PLSQL_CODE_TYPE:对象的编译模式
-
PLSQL_DEBUG:对象是否已编译以进行调试
-
PLSQL_WARNINGS:用于编译对象的编译器警告设置
-
NLS_LENGTH_SEMANTICS:用于编译对象的NLS长度语义
有关程序和功能的详细信息
USER_PROCEDURES视图提供有关架构中所有函数和过程的信息,包括模式级别和程序包内定义的函数和过程。这个视图的列是
-
AUTHID:显示过程或函数是否被定义为调用者权限(CURRENT_USER)或定义者权限(DEFINER)程序单元
-
DETERMINISTIC:如果函数被定义为确定性,则设置为YES,理论上这意味着函数返回的值完全由函数的参数值确定
-
PIPELINED:如果函数被定义为流水线函数,则设置为YES,这意味着它可以作为并行查询的一部分并行执行
-
OVERLOAD:如果此子程序过载,则设置为正数,这意味着在同一个包中至少有两个具有此名称的子程序
分析和修改触发状态
如果使用数据库触发器,USER_TRIGGERS(包含模式中定义的每个触发器的行)将派上用场。关键列是
-
TRIGGER_NAME:触发器的名称
-
TRIGGER_TYPE:一个字符串,显示这是否是BEFORE或AFTER触发器,以及它是行级还是语句级触发器(在INSERT语句之前触发的触发器中,例如,此列的值为BEFORE STATEMENT)
-
TRIGGERING_EVENT:SQL操作的类型 - 例如INSERT,INSERT或UPDATE,DELETE或UPDATE-这将导致触发器触发
-
TABLE_NAME:定义触发器的表的名称
-
STATUS:触发器的状态-ENABBLED或DISABLED
-
WHEN_CLAUSE:可以使用的可选子句,以避免不必要地执行触发器主体
-
TRIGGER_BODY:触发器触发时执行的代码
对象依赖性分析
USER_DEPENDENCIES视图描述了当前用户可访问的过程,包,函数,包体和触发器之间的依赖关系。您可以使用它来对代码执行影响分析,例如:如果我更改此表,需要更改多少程序?
此视图中的关键列是
-
NAME:对象的名称
-
TYPE:对象的类型
-
REFERENCED_OWNER:引用对象的所有者
-
REFERENCED_NAME:引用对象的名称
-
REFERENCED_TYPE:引用对象的类型
分析论据信息
USER_ARGUMENTS是PL / SQL程序员非常有用的视图。它包含有关模式中每个存储程序的参数(也称为参数)的信息。它同时提供了大量精心分析的信息和复杂的结构。关键列是
-
OBJECT_NAME:过程或函数的名称
-
PACKAGE_NAME:定义过程或函数的包的名称
-
ARGUMENT_NAME:参数的名称
-
POSITION:参数列表中参数的位置(如果为0,则为函数的RETURN子句)
-
IN_OUT:参数IN,OUT或IN OUT的模式
-
DATA_TYPE:参数的数据类型
-
DATA_LEVEL:复合类型的参数的嵌套深度(例如,如果您的参数之一'数据类型是记录,则USER_ARGUMENTS将为此参数设置一行,DATA_LEVEL为0,然后为记录中的每个字段设置一行DATA_LEVEL为1)