gbase8s oracle模式下往表里随机插入n条数据的存储过程

1.数据的信息

  • 数据库版本为3.5.1
  • 使用模式为oracle模式

2.存储过程的使用场景和方法

  • 针对场景:当对数据进行测试时,需要大量的数据,此存储过程可以根据字段类型和字段类型的长度,自动生成数据进行填充
  • 存储过程需要两个输入变量,分别是表名和插入的数据量

3.存储过程

create or replace procedure 
t1358(vtab varchar(100),num int)
as
--定义游标和相关类型
type my_type is ref cursor ;
cur2 my_type;
cur1 my_type;
--定义存储执行sql的类型
vsql varchar(1000);
tcn varchar(100);
tct varchar(100);
tctl int;
tva varchar(100);
i integer;

begin 
i:=1;
--对数据量做循环,引用了输入变量
while i < num loop
vsql:='insert into '||vtab||'(';
open cur1 for select A.colname  from syscolumns A left join syscolumnsext b on  a.colname=b.colname and a.tabid=b.tabid where a.tabid=(select tabid from systables where tabname=vtab);
loop
fetch cur1 into tcn;
exit when cur1%notfound;  
vsql:=vsql||tcn||',';
end loop;
vsql:=(select left(vsql,length(vsql)-1)||') VALUES(' from dual);
close cur1;

open cur2 for select COLTYPENAME2,COLLENGTH from systables A ,syscolumnsext B where a.tabid=b.tabid and a.tabname=vtab;
loop
fetch cur2 into tct,tctl;
exit when cur2%notfound;
case when tct like 'VARCHAR%' then tva:=(SELECT DBMS_RANDOM.STRING('a', tctl) FROM DUAL);
when tct in ('int','INTEGER') then tva:=(select  DBMS_RANDOM.value(1,100000)::int from dual);
when tct like 'CHAR%' then tva:=(select  DBMS_RANDOM.STRING('a', tctl) from dual);
else tva:='3';
end case;
vsql:=vsql||''''||tva||''',';
end loop;
vsql:=(select left(vsql,length(vsql)-1)||');' from dual);
EXECUTE IMMEDIATE vsql;
i:=i+1;
end loop;

end;/

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值