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;、测试 这个过程,那么 把变量 带入就可以 测试