测试技能:在oracle中自用存储过程进行测试数据构造

一、实践

–循环赋值

declare
i integer; --定义变量
begin
i := 101;
loop
/* 插入数据 /
insert into emp (EMP_ID, E_ID, UM_ID, NAME, BIRTHDAY, ADDRESS, POSTID, IDNO, GENDER, MARRY, MARRY_DESC, EM_NATIONAL, PHONE, XLNO, XL, COUNTRY, DEPT_ID, STATE, EMP_TYPE, EMP_TYPE_DESC, UPDATETIME)
values
(to_char(‘10000’+i), to_char(‘50100017847’ +i), CONCAT(‘kekexili’,to_char(i)), CONCAT(‘kekexili’,to_char(i)), ‘1900-01-01’, ‘深圳市XXXX’, ’ ', ‘123456190001012’, ‘m’, ‘M’, ‘已婚’, ‘不详’, ‘13800000000’, ‘10’, ‘大学专科’, ‘USA_PID’, ‘S000023309’, ‘A’, ‘1’, ‘正式员工’, ‘20171105’);
/
参数递增 /
i := i + 1;
/
停止条件 */
exit when i > 401;
end loop;
commit;
end;
/

二、其它
–存储过程,游标

declare c_num_acs_sequ number(10);
c_num_busi_scop NUMBER(10);
pk_num number(10);
CURSOR c_sal IS SELECT busi_code FROM OPP_BUSI_ACS_CFG group by busi_code order by busi_code;
begin
select count() INTO c_num_acs_sequ from user_tab_cols where table_name=‘OPP_BUSI_ACS_CFG’ and column_name=‘ACS_SEQU’;
SELECT COUNT(
) INTO c_num_busi_scop FROM USER_TAB_COLS WHERE TABLE_NAME=‘OPP_BUSI_ACS_CFG’ AND COLUMN_NAME=‘BUSI_SCOPE’;
SELECT COUNT() into pk_num FROM USER_CONSTRAINTS where CONSTRAINT_TYPE=‘P’ and TABLE_NAME=‘OPP_BUSI_ACS_CFG’;
IF c_num_acs_sequ=0 THEN
BEGIN
EXECUTE IMMEDIATE ‘alter table OPP_BUSI_ACS_CFG rename column ACS_ID to ACS_SEQU’;
EXECUTE IMMEDIATE ‘alter table OPP_BUSI_ACS_CFG modify(ACS_SEQU number(10))’;
END;
END IF;
if pk_num>0 then
BEGIN
EXECUTE IMMEDIATE ‘alter table OPP_BUSI_ACS_CFG drop constraint PK_OPP_BUSI_ACS_CFG’;
EXECUTE IMMEDIATE ‘alter table OPP_BUSI_ACS_CFG add constraint PK_OPP_BUSI_ACS_CFG primary key(busi_code,acs_sequ)’;
END;
end if;
SELECT COUNT(
) into pk_num FROM user_indexes where TABLE_NAME=‘OPP_BUSI_ACS_CFG’;
IF pk_num>0 THEN
BEGIN
EXECUTE IMMEDIATE ‘drop index PK_OPP_BUSI_ACS_CFG’;
END;
END IF;
FOR v_sal IN c_sal LOOP
EXECUTE IMMEDIATE (‘update OPP_BUSI_ACS_CFG set acs_sequ = rownum * 100 where busi_code =’’’ || v_sal.busi_code ||’’’’);
END LOOP;
IF c_num_busi_scop=0 THEN
EXECUTE IMMEDIATE ‘ALTER TABLE OPP_BUSI_ACS_CFG ADD BUSI_SCOPE VARCHAR2(32) DEFAULT NULL’;
END IF;
end;

–本想修改
set serveroutput on
declare
l_cur sys_refcursor;
l_empno varchar2(1000);
v_count varchar2(16) := ‘50100017858’;
begin
open l_cur for
select ODS_DICT_ITEM from dict_mapping where DICT_CODE = ‘NATIONALITY’;

loop
    fetch l_cur into l_empno;
    exit when l_cur%notfound;    
    dbms_output.put_line(l_empno);
    update emp  set EM_NATIONAL = l_empno where e_id = v_count;
    v_count := to_char(to_number(v_count) + 1);
end loop;
commit;

end;
/

–修改
procedure loop_cursor_for
is
begin
declare cursor userinfo_cur is select * from userinfo_table;
begin
FOR userinfo_rec in userinfo_cur
loop
dbms_output.put_line(‘username is:’ || userinfo_rec.user_name);
end loop;
end;
end loop_cursor_for;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值