北大青鸟oracle学习笔记26 27 28
数据库触发器
触发器语句
制定触发器定时、事件、表名及类型
触发器主体
是pl/sql快或对过程的调用
触发器限制
可以通过when子句实现
DML(insert update delete)
DDL(create alter drop)
数据库操作(servererror logon logoff startup shutdown)
create trigger 触发器名
before|after insert|delete|update of 列名
on 表名
[for each row] --行级触发器
when 条件
触发器谓词
inserting insert操作
updating update操作
deleting delete操作
可以根据这三个谓词判断到底在执行哪个操作
create or replace
Trigger tg_insert
before insert or update on student
for each row
begin
if updating then
dbms_output.put_line('before update');
end if;
if inserting then
dbms_output.put_line('before insert');
end if;
end;
触发器类型:
1、 表级触发器(表级触发器对每个DML语句执行一次)
create or replace Trigger tg_insert
before update on student
begin
dbms_output.put_line('before update);
end;
4 rows updated
before update
2、 行触发器 (行级触发器对DML语句影响的每个行执行一次)
create or replace
Trigger tg_insert
before update on student
for each row --每行触发一次
begin
dbms_output.put_line('before update');
end;
4 rows updated
before update
before update
before update
before update
使用触发器时,两个特殊值:new 新插入的值 :old 原来的值 不能用于表级触发器
create or replace trigger trig_job
before insert or update of job
on emp
for each row
begin
if inserting then
:new.job:=upper(:new.job);
else
:new.job:=upper(:new.job);
end if;
end;
3、INSTEAD OF触发(此触发器是在视图上而不是在表上定义的触发器,它是用来替
相关文档:
很多人都知道,Oracle的监听器一直存在着一个安全隐患,假如不设置安全措施,那么能够访问的用户就可以远程关闭监听器。
相关示例:
D:\>lsnrctl stop eygle
LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 28-11月-2007 10:02:40
Copyright (c) 1991, 2006, Oracle. All rights reserved.
......
首先去http://metalink.oracle.com 下载相关的补丁包,因为是64位for windows的包是p6810189_10204_MSWIN-x86-64.zip,下载地址:
ftp://updates.oracle.com/6810189/p6810189_10204_MSWIN-x86-64.zip
操作如下.
(1) Oracle推荐在升级之前先做一个全库的备份;
(2) 停止所有的Oracle服务
emctl stop dbconsole
isqlplusc ......
子程序 命名的pl/sql块
create procedure 过程名 [参数1 in|out|in out…]
局部变量声明
执行语句
in
out
in out
过程名(参数里表); create or replace
procedure add123 as
i integer;
j integer;
begin
i:=1;
j:=2;
dbms_output.put_l ......
【原因/触发因素】
确定是由于oracle11g中默认在default概要文件中设置了“PASSWORD_LIFE_TIME=180天”所导致。
【影响和风险】
影响
密码过期后,业务进程连接数据库异常,影响业务使用。
问题发生频率
数据库密码过期后,业务进程一旦重启会提示连接失败。
【解决方案】
按照如下步骤进行操作:
1、查 ......
过程中的事务
定义过程p1
create or replace procedure p1
as
begin
insert into student values(5,'xdh','m',sysdate);
rollback;
end;
定义过程p2
create or replace procedure p2
as
begin
update student set stu_sex = 'a' where stu_id = 3;
p1;
end;
执行过程p2
exec p2;
执行完毕发现 ......