測試技能:在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;