大家对我那篇文章的回复都好,在此谢谢大家了!因为之前我给我们部门所有人讲解过关于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.   

    我不用trigger,不过还是看看,楼主公布答案吧
      

  2.   

    你莫打击我 搞我的不想弄ORACLE了
      

  3.   

    1、Oracle中触发器包括: 
      A、DDL触发器 
      B、DML触发器 
      C、替代触发器 
      D、混合触发器
    =====================
    还有系统触发器呢?
      

  4.   


    DDL触发器也属于系统触发器
      

  5.   

    还有,由于我出的题,系统组还在录入我们的考试系统,都还没有考所以现在答案不贴出来哈不过自己先思考下 ,还是好的昨晚一个好朋友看了我出的题,倍受打击真有那么难吗?如果大家觉得这题确实难?  想必我该重新出了,不然主管看到考试结果,一群群的都是不及格!我就说不清楚了不过,这些题 我都给他们做报告的时候都讲到过,WORD文档和测试文档都有的。应该不会很糟糕吧!
      

  6.   

    官方文档:
    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触发器属于系统触发器。
      

  7.   

    我是在china.pub社区下的一本书6.1.3节: O r a c l e 8 i提供了第三种触发器,这种系统触发器在发生如数据库启动或关闭等系统
    事件时激发,而不是在执行D M L语句时激发。系统触发器也可以在D D L操作时,如
    表的创建中激发……