Oracle一些知识说明(2)
1.oracle 中的触发器分为DML及DDL Trigger
DML:是对表或视图的数据操作,Install of trigger不能用于表,只能用于视图。
DDL:是对数据库,表等的事件进行触发。
记着trigger中 when的应用.
2.OLD及NEW的应用
a. 每当触发器执行时,有OLD或New或同时出现的相同的结构变量,用于记录数据更改前后的记录.
b. New和OLD两个伪记录也包括ROWID列,它们两个的此值是一样的。
c.OLD中的值是不能改变的,但NEW中的值可以改变。
d.在触发器的When条件中使用OLD或NEW变更,前面不用加:号,但在PL/SQL的匿名块中使用一定要加上:号。
e.我们可以利用Referencing子句来改变数据库Trigger两个伪记录的名称。
3.Oracle数据字典
Oracle中一些数据字典视图对从事此DB的人员非常有用。
User_* : 通过这类视图,查看的是当前连接schema所拥有的数据库对象的信息。
ALL_* : 通过这类视图查看的是当前连接schema所能够访问的数据库对象的信息(可以是当前连接schema拥有的对象,也可以是当前连接schema已经被授权访问的对象)。通常这类视图和对应的User类视图具有相同的列,不过All视图中会多出一个OWNER列。
DBA_* : 这个视图显示的是全部(V$,gx$,x$视图例外)数据库对象的信息,这类视图通常和对应的ALL类视图具有相同的列。
User视图主要有以下这些:
USER_ARGUMENTS: 当前schema所拥有的全部过程和函数的参数信息 USER_DEPENDENCIES: 当前schema所拥有的对象之间的互相依赖的关系,Oracle主要通过这个视图来标识对象的无效状态,同样,IDE工具也是借助这个视图才能在对象浏览器中显示对象间的依赖信息的,请注意,对于完整的依赖关系的分析,我们应该使用ALL_DEPENDENCIES,因为我们的程序单元可能会调用到其它schema所拥有的对象。 USER_ERROR: 当前schema拥有的所有对象(包括触发器)的编译错误。 SQL*Plus的SHOW ERRORS命令访问的就是这个视图,我们也可以使用这个视图构建自己的查询语句。 USER_IDENTIFIERS(PL/Scope) 这个视图从11g开始引入,其内容是由PL/scope编译工具进行填充的。填充之后,这个视图就可以为我们提供代码中所有标识符的相关信息(如程序名,变量等),这是一个非常强大的代码分析工具. USER_OBJECTS 这个视图显示当前schema拥有的对象(数据库连接除外)。例如:可以通过这个视图查看某个对象是否被标志成INVALID,或者找出那些名字中带有“EMP”字样的程序包等 USER_OBJECT_SIZE 当前schema拥有的各对象的大小。事实上,这个视图显示的源代码、解析后的代码以及编译后的代码的大小。 USER_TRIGGERS和USER_TRIGGERS_COLS 当前schema所拥有的数据库触发器(包括源代码及触发事件的说明)及触发器对应的列,可以根据这个视图写一个程序,来启用或禁用某个表的全部触 发器。
4. 当一些无效的procedure或包,就需要Alter...Compile重新编译
ALTER PACKAGE BOOKWORM COMPILE BODY REUSE SETTINGS;
ALTER PACKAGE BOOK COMPILE BODY REUSE SETTINGS;
我们注意至,语句中带有“REUSE SETTINGS”字样,这个子句用来确保之前和这些程序单元关联的编译器设置(包括优化级、警告级等)都保持不变。如果我们没有带上REUSE SETTNGS,重新编译过程就会使用会话的当前设置。
我当然如果有很多无效对象,我们可以编写一个简单的查询,比如:
SELECT 'ALTER '||OBJECT_TYPE||' '||OBJECT_NAME||' COMPILE REUSE SETTINGS;' FROM User_Objects x WHERE x.status='INVALID'