T unit_price FROM product WHERE id = @product_id;
SET @num_items = @num_items + 1;
END LOOP loop1;
SELECT num_items from total_temp;
END;
分支语句:
1、改变执行流程
2、LEAVE
3、CALL
LEAVE:
1、结束一个过程循环
2、要求一个语句标号
3、语法:
LEAVE 语句标号
4、实例:
SET @total = 0;
SET @num_items = 0;
INSERT INTO total_temp VALUES (0,0);
loop1:
WHILE @total < 100.00 LOOP
UPDATE total_temp SET num_items = @num_items;
IF @total > 100.0
THEN LEAVE loop1;
END if;
SET @total = @total + SELECT unit_price
FROM product WHERE id = @product_id;
SET @num_items = @num_items + 1;
END LOOP loop1;
SELECT num_items from total_temp;
END;
建立触发器
1、由组合语句构成 与存储过程具有同样的能力及特点 触发器不能包括参数和返回结果集
2、语法
CREATE TRIGGER trigger-name trigger-time trigger-event
FOR EACH [ROW | STATEMENT]
BEGIN
...;
...;
END
3、建立触发器的用户应具有以下权限 RESOURCE 权 对所需表的ALTER 权限
插入型触发器
1、实例 — 禁止增加一个已被解雇的新职员
CREATE TRIGGER ai_employee AFTER INSERT ON employee REFERENCING NEW AS new_emp FOR EACH ROW
BEGIN
IF new_emp.termination_date IS NOT NULL
THEN
RAISERROR 30000 'You cannot hire an employee you have already fired';
END IF;
END
删除型触发器
1、实例 — 禁止删除一个还未期满的雇员
CREATE TRIGGER d_employee BEFORE DELETE ON employee REFERENCING OLD AS cur_emp FOR EACH ROW
BEGIN
IF cur_emp.termination_date IS NULL
THEN
RAISERROR 30001 'You cannot delete an employee who has not been fired';
END IF;
END
更新型触发器
1、实例 — 职员工资升不许降
CREATE TRIGGER bu_employee BEFORE UPDATE ON employee
REFERENCING NEW AS after_update OLD AS before_update
FOR EACH ROW
BEGIN IF after_update.salary < before_update.salary THEN
RAISERROR 30002 'You cannot decrease a salary';
END IF;
END
列级更新触发器
1、实例 — 工资只可增加,仅当更新salary列时才激发触发器
CREATE TRIGGER ub_empsal BEFORE UPDATE OF salary ON employee
REFERENCING NEW AS after_update OLD AS before_update
FOR EACH ROW
BEGIN
IF after_update.salary < before_update.salary
THEN RAISERROR 30002 'You cannot decrease a salary';
END IF;
END
删去一个触发器
1、语法
DROP TRIGGER trigger-name
2、实例
DROP TRIGGER mytrigger
3、要求对表有 ALTER 权限
触发器的执行时机
1、当数据库出现相应动作时自动被执行
2、操作次序:
BEFORE 触发器
参照动作
操作
AFTER 触发器
对ASE 触发器兼容性的考虑
1、回滚
Adaptive Server Anywhere不支持触发器内的回滚
在ASE(或 T-SQL)的触发器中可包含回滚
触发器与激发该触发器的操作是原子化的,如果此触发器失败则该操作也自动失败。
2、嵌套
一个触发器所执行的动作导致激发另一个触发器
Adaptive Server Anywhere 对嵌套层数未作明确限制
除非Adaptive Server Anywhere运行资源超出,ASE 给出可配置的最大限制数 缺省值是16
目标
1、讨论防止数据损坏的三种预防措施
2、说明可考虑的几种备份策略
3、标明哪些类型的故障可被Adaptive Server Anywhere恢复
4、说明Adaptive Server Anywhere在出现校验点时都作些什么
5、修理一个出毛病的事务日志或镜象文件
6、恢复出现系统故障后的Adaptive Server Any