关于db2有一个测试数据的方法,特总结一下,方便自己以后使用,也欢迎大家指正错误。
一个很大的存储过程,包含多个临时表,执行存储过程可以通过,但在调用时发生异常。数据量太大不知道从哪里查找,可以用以下两种方式进行测试:
1.创建一个新表,然后从新表中查询
CREATE TABLE BIT_TABLE LIKE SESSION.middle;
INSERT INTO BIT_TABLE SELECT * FROM SESSION.middle;
在这里,BIT_TABLE 是一个新表, SESSION.middle是存储过程中的一个临时表。
目的是:测试 SESSION.middle中的数据
说明:必须调用存储过程后,才能在数据库中查询到表 BIT_TABLE的数据
2.利用游标的方式
例如:
DECLARE v_resultCur2 CURSOR WITH RETURN TO CALLER FOR WITH temp (i_org, c_brand,pricetypecode, sellqty, sellmny, sellqtytq, sellmnytq) AS ( SELECT CASE WHEN i_org LIKE '22%' THEN '11' || SUBSTR(i_org, 3, 6) ELSE i_org END AS i_org, c_brand,pricetypecode, SUM(CASE WHEN report_date between v_begindate and v_endDate THEN out_sell_amount END), SUM(CASE WHEN report_date between v_begindate and v_endDate THEN out_sell_money END), SUM(CASE WHEN report_date between v_tq_beginDate and v_tq_endDate THEN out_sell_amount END), SUM(CASE WHEN report_date between v_tq_beginDate and v_tq_endDate THEN out_sell_money END) FROM sum_qy_y_d_selldetail WHERE ((report_date between v_begindate and v_endDate) OR (report_date between v_tq_beginDate and v_tq_endDate)) AND (out_sell_amount<>0 OR out_sell_money<>0) GROUP BY CASE WHEN i_org LIKE '22%' THEN '11' || SUBSTR(i_org, 3, 6) ELSE i_org END, c_brand,pricetypecode ) SELECT i_org, c_brand,pricetypecode, sellqty,sellmny, 1 FROM temp UNION ALL SELECT i_org, c_brand,pricetypecode, sellqtytq,sellmnytq,2 FROM temp OPEN v_resultCur2;
这里 v_resultCur2 是一个游标,利用这个游标测试 temp 中的数据。
我常用第一种方式,觉得简单直观些。