大家对我那篇文章的回复都好,在此谢谢大家了!因为之前我给我们部门所有人讲解过关于trigger的一些知识,而且自己做的文档很详细,确实不错。现在主管喊我出题考下大家,检查下大家究竟认真听没听我讲,下来是否去看了我的文档,因为我们公司说实话是倡导共同进步的。题型为选择题,10来道吧。其实,我发这个帖子的目的,我只是想简单了解下大家的想法。题我已经出好了,现在发出来大家看看,有意见就提出来哦,大家共同进步嘛!呵呵~~=====================================================================================
一、单选题
1、触发器的执行,是在commit之前还是commit之后?
A、commit之前
B、commit之后2、在触发器(不考虑其他事务参与)的触发体中,可否包含有commit或rollback?
A、可以
B、不可以3、在触发器(不考虑其他事务参与)的触发体中,可否使用DDL语句?
A、可以
B、不可以 4、触发器的执行是否会因schema的不同而拒绝执行?
A、会
B、不会5、自治事务与主事务是否共享同一会话?
A、是
B、不是二、不定项选择题
1、Oracle中触发器包括:
A、DDL触发器
B、DML触发器
C、替代触发器
D、混合触发器2、关于触发器,下列叙述正确的有:
A、触发器可以保证数据库的安全性。
B、触发器可以实现一些较复杂的数据约束。
C、触发器可以提供审计功能,跟踪用户操作。
D、在一些大型项目中,触发器可能会导致复杂的逻辑依赖关系,因此触发器要慎用!3、关于变量:new和:old,下列叙述正确的有:
A、:new和:old变量可以用在语句级和行级触发器中。
B、:new变量只能用在insert和update语句中。
C、:old变量只能用在update和delete语句中。
D、insert、update或delete语句中,都可使用:old和:new变量。4、下列关于替代触发器的叙述,正确的有:
A、替代触发器只能是行一级的。
B、替代触发器允许对无法变更的视图进行修改。
C、替代触发器就是用来代替执行DML语句的。
D、替代触发器用instead of申明。5、下列叙述,错误的有:
A、对于语句级触发器,不管有没有行受到影响,都仅执行一次。
B、对于行级触发器,每影响一行就要执行一次,若没有行受到影响则不执行。
C、多个触发器的执行,按照从语句到行的顺序先后执行。
D、before和after选项可以运用于替代触发器中。6、关于自治事务(AT),下列叙述错误的有:
A、在匿名PL/SQL块中,只有顶级的匿名PL/SQL块可以被设为AT。
B、AT必须以commit 或rollback结尾。
C、AT的提交或回滚不影响当前的事务,并且可以看到当前会话所做的未提交的修改。
D、如果AT试图访问被主事务(MT)控制的资源,可能导致deadlock发生。
E、package不能被声明为AT,只有package所拥有的function和procedure才能声明为AT。7、有学生表student(sid,sname,age,cid,……),课程表course(cid,cname,teacher,grade,……)
下列SQL语句创建的视图中,属于可变更视图的有:
A、create or replace view view_1 as select sid,sname from student;
B、create or replace view view_2 as select cid,cname,avg(grade) avg from course group by cid,cname;
C、create or replace view view_3 as select distinct sid,sname from student;
D、create or replace view view_4 as select s.sid,s.sname,c.cname,c.grade from student s,course c where s.cid=c.cid;8、有如下一个触发器,功能:更新s表时,将更新前的数据一并插入临时表temp_s中。
create or replace trigger trigger_u_s
after update on s
for each row
begin
insert into temp_s values(:old.sid,:old.sname,
to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;
下列叙述正确的是:
A、编译时报错!
B、可以通过编译,但执行时报错!
C、编译和执行都不会报错,但临时表中没有数据插入!
D、以上说法都不正确!9、有如下一个触发器,功能:更新s表时,将更新前的数据一并插入临时表temp_s中。
create or replace trigger trigger_u_s
after update on s
for each row
declare
tid s.sid%type;
begin
select sid into tid from s where sname=:new.sname;
insert into temp_s values(tid,:old.sname,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
end;
下列叙述正确的是:
A、编译时报错!
B、可以通过编译,但执行时报错!
C、编译和执行都不会报错,但临时表中没有数据插入!
D、以上说法都不正确!10、现有一张临时表t(id number(3),name varchar2(10));
还有三个存储过程:一个普通存储过程(p1),两个自治事务的存储过程(p2和p3)。
如下:create or replace procedure p1
as
begin
insert into t values(1,'test1');
for i in (select count(*) cnt from t) loop
dbms_output.put_line('p1:'||i.cnt);
end loop;
end;
/create or replace procedure p2
as
pragma autonomous_transaction; --自治事务
begin
insert into t values(2,'test2');
for i in (select count(*) cnt from t) loop
dbms_output.put_line('p2:'||i.cnt);
end loop;
commit; --事务提交
end;
/
create or replace procedure p3
as
pragma autonomous_transaction; --自治事务
begin
insert into t values(3,'test3');
insert into t values(4,'test4');
for i in (select count(*) cnt from t) loop
dbms_output.put_line('p3:'||i.cnt);
end loop;
p1; --调用普通过程
p2; --调用自治过程
commit;
end;
/
三个procedure已经编译成功。
原始t表无数据,现往t表中插入一条记录:insert into t values(5,'test5');
在这条记录数据不提交的情况下,执行p3。
下列执行结果,正确的是:
A、p3:2
p1:3
p2:1
B、p3:2
p1:4
p2:1
C、p3:2
p1:3
p2:3 D、p3:2
p1:4
p2:3
如果p3中p1和p2的执行顺序互换,那执行结果又会是什么呢?
一、单选题
1、触发器的执行,是在commit之前还是commit之后?
A、commit之前
B、commit之后2、在触发器(不考虑其他事务参与)的触发体中,可否包含有commit或rollback?
A、可以
B、不可以3、在触发器(不考虑其他事务参与)的触发体中,可否使用DDL语句?
A、可以
B、不可以 4、触发器的执行是否会因schema的不同而拒绝执行?
A、会
B、不会5、自治事务与主事务是否共享同一会话?
A、是
B、不是二、不定项选择题
1、Oracle中触发器包括:
A、DDL触发器
B、DML触发器
C、替代触发器
D、混合触发器2、关于触发器,下列叙述正确的有:
A、触发器可以保证数据库的安全性。
B、触发器可以实现一些较复杂的数据约束。
C、触发器可以提供审计功能,跟踪用户操作。
D、在一些大型项目中,触发器可能会导致复杂的逻辑依赖关系,因此触发器要慎用!3、关于变量:new和:old,下列叙述正确的有:
A、:new和:old变量可以用在语句级和行级触发器中。
B、:new变量只能用在insert和update语句中。
C、:old变量只能用在update和delete语句中。
D、insert、update或delete语句中,都可使用:old和:new变量。4、下列关于替代触发器的叙述,正确的有:
A、替代触发器只能是行一级的。
B、替代触发器允许对无法变更的视图进行修改。
C、替代触发器就是用来代替执行DML语句的。
D、替代触发器用instead of申明。5、下列叙述,错误的有:
A、对于语句级触发器,不管有没有行受到影响,都仅执行一次。
B、对于行级触发器,每影响一行就要执行一次,若没有行受到影响则不执行。
C、多个触发器的执行,按照从语句到行的顺序先后执行。
D、before和after选项可以运用于替代触发器中。6、关于自治事务(AT),下列叙述错误的有:
A、在匿名PL/SQL块中,只有顶级的匿名PL/SQL块可以被设为AT。
B、AT必须以commit 或rollback结尾。
C、AT的提交或回滚不影响当前的事务,并且可以看到当前会话所做的未提交的修改。
D、如果AT试图访问被主事务(MT)控制的资源,可能导致deadlock发生。
E、package不能被声明为AT,只有package所拥有的function和procedure才能声明为AT。7、有学生表student(sid,sname,age,cid,……),课程表course(cid,cname,teacher,grade,……)
下列SQL语句创建的视图中,属于可变更视图的有:
A、create or replace view view_1 as select sid,sname from student;
B、create or replace view view_2 as select cid,cname,avg(grade) avg from course group by cid,cname;
C、create or replace view view_3 as select distinct sid,sname from student;
D、create or replace view view_4 as select s.sid,s.sname,c.cname,c.grade from student s,course c where s.cid=c.cid;8、有如下一个触发器,功能:更新s表时,将更新前的数据一并插入临时表temp_s中。
create or replace trigger trigger_u_s
after update on s
for each row
begin
insert into temp_s values(:old.sid,:old.sname,
to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;
下列叙述正确的是:
A、编译时报错!
B、可以通过编译,但执行时报错!
C、编译和执行都不会报错,但临时表中没有数据插入!
D、以上说法都不正确!9、有如下一个触发器,功能:更新s表时,将更新前的数据一并插入临时表temp_s中。
create or replace trigger trigger_u_s
after update on s
for each row
declare
tid s.sid%type;
begin
select sid into tid from s where sname=:new.sname;
insert into temp_s values(tid,:old.sname,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
end;
下列叙述正确的是:
A、编译时报错!
B、可以通过编译,但执行时报错!
C、编译和执行都不会报错,但临时表中没有数据插入!
D、以上说法都不正确!10、现有一张临时表t(id number(3),name varchar2(10));
还有三个存储过程:一个普通存储过程(p1),两个自治事务的存储过程(p2和p3)。
如下:create or replace procedure p1
as
begin
insert into t values(1,'test1');
for i in (select count(*) cnt from t) loop
dbms_output.put_line('p1:'||i.cnt);
end loop;
end;
/create or replace procedure p2
as
pragma autonomous_transaction; --自治事务
begin
insert into t values(2,'test2');
for i in (select count(*) cnt from t) loop
dbms_output.put_line('p2:'||i.cnt);
end loop;
commit; --事务提交
end;
/
create or replace procedure p3
as
pragma autonomous_transaction; --自治事务
begin
insert into t values(3,'test3');
insert into t values(4,'test4');
for i in (select count(*) cnt from t) loop
dbms_output.put_line('p3:'||i.cnt);
end loop;
p1; --调用普通过程
p2; --调用自治过程
commit;
end;
/
三个procedure已经编译成功。
原始t表无数据,现往t表中插入一条记录:insert into t values(5,'test5');
在这条记录数据不提交的情况下,执行p3。
下列执行结果,正确的是:
A、p3:2
p1:3
p2:1
B、p3:2
p1:4
p2:1
C、p3:2
p1:3
p2:3 D、p3:2
p1:4
p2:3
如果p3中p1和p2的执行顺序互换,那执行结果又会是什么呢?
解决方案 »
- ORA-01092错误,救急!!
- oracle 方案对向转移
- oracle数据库不知道表空间名如何附加,请高手解决
- 一个小问题
- ★★★★★救命呀!!运行时出现:The Network Adapter could not establish the connection错误★★★★★
- PLSQL Developer 6.0.3.893下载地址
- 开发一个导入和导出数据库小工具的问题!
- 用plsql developer单步调试,为什么不能显示变量的值???
- 如何将DMP文件导入到ORACLE92中
- 如何直接向clob列中插入数据
- 查某一月的数据的sql语句
- select * from 表,请问如何给结果编号。
A、DDL触发器
B、DML触发器
C、替代触发器
D、混合触发器
=====================
还有系统触发器呢?
DDL触发器也属于系统触发器
You can use triggers to publish information about database events to subscribers. Applications can subscribe to database events just as they subscribe to messages from other applications. These database events can include:1.System events Database startup and shutdown Data Guard role transitions Server error message events2.User events User logon and logoff DDL statements (CREATE, ALTER, and DROP) DML statements (INSERT, DELETE, and UPDATE)
不知道你从哪看得分类,说ddl触发器属于系统触发器。
事件时激发,而不是在执行D M L语句时激发。系统触发器也可以在D D L操作时,如
表的创建中激发……