包头
create or replace package pkg_interview_test is
--公共常量,变量
/**
* 对user_info表造数
* num 条数
**/
procedure pro_gene_user_data(num number);
-- 注意无入参时,不能写括号!
-- 随机获得城市名称
function get_city_name return varchar2;
-- 随机获得用户名称
function get_user_name return varchar2;
end;
包体
create or replace package body pkg_interview_test is
-- 本包的私有常量
PKG_NAME CONSTANT VARCHAR2(500):='pkg_interview_test';
-- 生成num条测试数据
procedure pro_gene_user_data(num number) is
FCT_NAME constant varchar2(500):='pro_gene_user_data';
v_error_msg varchar2(1000);
begin
insert into user_info(id,name,birthday,address)
select sys_guid(),
get_user_name,
date'1980-1-1'+dbms_random.value(0,3650), -- 在1980-1-1基础上,加上随机的天数。
get_city_name
from dual
connect by level <= num; -- connect by 树形连接语法,需要生成的数据条数
-- 记日志
insert into public_db_log(package_name, function_name,user_desc , is_exception)
values(PKG_NAME,FCT_NAME,'插入了'||num||'条记录','N');
commit;
exception
when others then
v_error_msg:=substr(SQLERRM,1,1000);
insert into public_db_log(package_name, function_name, error_log, is_exception)
values(PKG_NAME,FCT_NAME,v_error_msg,'Y');
commit;
end;
/*************************************************************************************************/
-- 随机获得城市名称
function get_city_name return varchar2 is
FCT_NAME constant varchar2(500):='get_city_name';
v_error_msg varchar2(1000);
type city_name is varray(10) of varchar2(100);
v_city_name city_name:=city_name('成都','绵阳','德阳','南充','北京','上海','广州','深圳','杭州','南京');
v_index number; --数组索引,注意是从1开始的
begin
v_index:=dbms_random.value(1,v_city_name.count);
return v_city_name(v_index);
exception
when others then
v_error_msg:=substr(sqlerrm,1,1000);
insert into public_db_log(package_name, function_name, error_log, is_exception)
values(PKG_NAME,FCT_NAME,v_error_msg,'Y');
commit;
return '成都';
end;
/*************************************************************************************************/
function get_user_name return varchar2 is
FCT_NAME constant varchar2(500):='get_user_name';
v_error_msg varchar2(1000);
-- 姓 数组
type varray_xing is varray(20) of varchar2(20);
v_varray_xing varray_xing:=varray_xing('赵','钱','孙','李','周','吴','郑','王','卫','蒋','沈','韩','杨','万俟','司马','上官','欧阳','夏侯','诸葛','东方');
v_xing varchar2(20);
-- 名
v_ming_str varchar2(1000):='芳华林琳丽中彬斌冰兵为伟炜艳烟龑燕莎沙深胜升昇南楠豪红松';
v_ming varchar2(20);
v_index number;
begin
v_index:=dbms_random.value(1,v_varray_xing.count);
v_xing:=v_varray_xing(v_index);
v_index:=dbms_random.value(1,length(v_ming_str));
v_ming:=substr(v_ming_str,v_index,1);
return concat(v_xing,v_ming);
exception
when others then
v_error_msg:=substr(sqlerrm,1,1000);
insert into public_db_log(package_name, function_name, error_log, is_exception)
values(PKG_NAME,FCT_NAME,v_error_msg,'Y');
commit;
return '张三';
end;
end;