使用Oracle数据字典视图分析程序包、函数、存储过程

        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)

猜你喜欢

转载自blog.csdn.net/panjin72/article/details/81666001