ITPub博客

首页 > 数据库 > Oracle > 【转】ORACLE触发器的测试

【转】ORACLE触发器的测试

Oracle 作者:╭ァ沵⒋莪哒 时间:2013-12-08 13:04:10 0 删除 编辑

1.翻开并登录pl/sql,File->New->Test Window;

2.正在出现的窗口中的begin后输进脚本,该语句该当可以或许调用存储过程、函数,或语句能触收触收器;

比如我为某个表users的insert操做创建了触收器,那末test中的语句就是

update TABLE1

年夜概

INSERT TABLE2

寄望sql语句结尾不需供加分号。

3.这时辰假设直接正在测试窗口施行F9,不会进进调试形态,也不会施行上边的插进语句。需供正在trigger左击,选中“添加调试疑息”。

4. 这时F9进进调试形态,隐现trigger创建语句,窗口上边有调试体例的按钮,划分是:运转、逐行调试、跳过方法调试、运转至下个断面、运转至下个异常面。

5.调试过程当中可以或许把鼠标放正在变量上,即可以或许看到变量确当前值。

假设要调试存储过程、方法,可直接左键便有“Test”。

查察变量借可以或许随时正在varible List中输进我们念查察的变量,回车,即可看到。

寄望 这个 要供 ORACLE 为8.17I 版本以上的

借有一个调试方法是 将TIRIGER中 BEGIN 开初的部门做一个存储过程

然后测试 这个存储过程

create or replace procedure test_bal_ic_total(store_no       number,
                                              ref_no         number,
                                              total_net_amnt number,
                                              net_amnt       number,
                                              appr_date      date,
                                              automatic number) is
begin
  DECLARE
    vstore_no       number(2);
    vref_no         number(6);
    vtotal_net_amnt number(15, 2);
    vnet_amnt       number(15, 2);
    vappr_date      date;
    vautomatic number(1);

    vcheckflag number(1);
    vord_no number(6);
    vord_year varchar2(4);
    updatenorow exception;
  BEGIN
    if sqlcode = -1403 then
      raise updatenorow;
    end if;
    vstore_no       := store_no;
    vref_no         := ref_no;
    vtotal_net_amnt := total_net_amnt;
    vnet_amnt       := net_amnt;
    vappr_date      := appr_date;
    vautomatic      := automatic;
    if (vautomatic = 0) then
      vcheckflag := 3;
    else
      vcheckflag := 2;
    end if;
    select ord_no, to_char(ord_date, "yyyy")
      into vord_no, vord_year
      from orders
     where (store_no, ord_no) in
           (select store_no, ord_no
              from ord_ref
             where store_no = vstore_no
               and ref_no = vref_no);
    update bal_ic_total
       set perc                = decode(round((vtotal_net_amnt - vnet_amnt) * 100 /
                                              vnet_amnt,
                                              2),
                                        14.94,
                                        14.943,
                                        round((vtotal_net_amnt - vnet_amnt) * 100 /
                                              vnet_amnt,
                                              0)),
           amount_vat          = vtotal_net_amnt - vnet_amnt,
           ic_total_net_amnt   = vtotal_net_amnt,
           diff_total_net_amnt = ord_total_net_amnt - vtotal_net_amnt,
           checkflag           = vcheckflag,
           appr_date           = vappr_date
     where store_no = vstore_no
       and ord_no = vord_no
       and ord_total_net_amnt >= 0
       and checkflag != 4
       and ord_year = vord_year
       and flag = 0;
  exception
    when updatenorow then
      null;
    when others then
      dbms_output.put_line(to_char(sqlcode));
  END;

end test_bal_ic_total;
、
测试 这个过程,那末 把变量 带进即可以或许 测试
>

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23070346/viewspace-1116893/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-12-24