为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个表的结构及其数据类型时,就只能采用这种方法定义变量的数据类型。
一行记录可以保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有相同的名称和数据类型。
调用存储过程的语句
1.EXEC 存储过程名;
或
2.BEGIN
存储过程名
END;
触发器
概念:它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
按操作分类:
数据操作语言(DML)触发器:insert update delete
数据定义语言(DDL)触发器: create alter drop
复合触发器
INSTEAD OF触发器
用户和系统事件触发器
创建DML触发器
例子:
对emp表的工资(sal)进行修改时,当工资总额超过最高总额100000的限制时,系统必须拒绝修改员工的工资并在屏幕上输出提示
Create or replace trigger tri_sal
Before update of sal
On emp
For each row
Declare
V_sum number(8);
PRAGMA AUTONOMOUS_TRANSACTION;
Begin
Select sum(:new.sal) into v_sum from emp;
If
V_sum>100000
Then
Raise_application_error(-20016,’不允许总工资超过100000!’);