需求:要往数据库表里造一批数据,用于测试人员测试,测试人员通过修改开始时间和结束时间来模拟这段时间的数据(数据时间间隔也作为参数配置)。
约束:1、使用存储过程的方式。2、表名称也要作为一个参数传入。3、以下测试可能不太符合真实业务,仅仅是为了展示:表名做参数 if条件,for循环的用法。
环境:数据库:Oracle 11g 可视化工具:PL/SQL
步骤1:数据库中有这样一张表(如图)记录了一个人每隔一段时间的身高变化(假设这个人一直长高)。
步骤2:想模拟一段时间的测试数据,开始写存储过程(关键代码已经注释):
CREATE OR REPLACE PROCEDURE insertTableData(tablename IN varchar2, starttime in Varchar2, endtime IN Varchar2, spac IN NUMBER) AS
--初始化n_count的值
n_count number := 0;
--用spac初始化n_spac
n_spac NUMBER := spac;
--定义一个字符串用来存储sql
dynamic_drop_sql varchar2(1000);
BEGIN
--时间间隔(30<= spac <=60)
IF spac > 60 THEN
n_spac := 60;
ELSIF spac < 30 THEN
n_spac := 30;
END IF;
--循环开始
while to_date(starttime, 'yyyy-mm-dd hh24:mi:ss')+ n_count*n_spac/(24*60) < to_date(endtime, 'yyyy-mm-dd hh24:mi:ss') LOOP
--插入id=n_count user_name=张三 height=100+n_count check_time=starttime+spac
dynamic_drop_sql := 'INSERT INTO '|| tableName ||' (ID, user_name, height, check_time) VALUES
('||n_count||', ''张三'', 100+'|| n_count ||', to_date('||concat(concat('''',starttime),'''')||', ''yyyy-mm-dd hh24:mi:ss'')+'|| n_count*n_spac/(24*60)||')';
--打印sql语句
dbms_output.put_line(dynamic_drop_sql);
--执行动态SQL语句
execute immediate dynamic_drop_sql;
--提交
COMMIT;
--每循环一次 n_count+1
n_count := n_count + 1;
--结束循环
END LOOP;
END;
贴一张图,这样看的更清楚
步骤3,:用PL/SQL测试下存储过程。 如果没有PL/SQL也可以用sqlplus来测试(步骤4)
步骤4:用sqlplus测试
步骤5:看结果
nice!!