Oracle存储过程实现批量模拟数据(表名做参数 + if,for条件判断)

需求:要往数据库表里造一批数据,用于测试人员测试,测试人员通过修改开始时间结束时间来模拟这段时间的数据(数据时间间隔也作为参数配置)。

约束: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!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值