oracle 存储过程练习

包头

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值