第一次自己写存储过程去进行设备录入——存做纪念

---录设备---存储过程

create or replace procedure lu_shebei (r_res out varchar2) is
type t_cursor is ref cursor;
v_mycur t_cursor;
v_yonghu_id yong_hu.id%type;
v_id yonghu_luyou_xiangqing.id%type;
v_luyou_id yonghu_luyou.id%type;
v_shebei_id peixian_jia.id%type;
v_shebei_bianma peixian_jia.bian_hao%type;
v_mokuai_leibie yonghu_luyou_xiangqing.mokuai_leibie%type;
v_mokuai_id peixian_mokuai.id%type;
v_mokuai_bianma peixian_mokuai.bian_hao%type;
v_jusuo_id yong_hu.ju_suo%type;
v_xu_hao yonghu_luyou_xiangqing.xu_hao%type;
v_duankou_leibie peixian_duanzi.shebei_dalei%type;
v_lie varchar2(255);
v_kuai varchar2(255);
v_duankou_id peixian_duanzi.id%type;
v_duankou_hao peixian_duanzi.duanzi_hao%type;
v_sql varchar2(255);
v_count   number(10);
v_count2   number(10);
v_duiduan_shebei_dalei shebei_duiduan_xinxi.duiduan_shebei_dalei%type;
v_lu_shebei_i lu_shebei_i%rowtype;
begin
  v_sql := 'select * from lu_shebei_i';
  open v_mycur for v_sql;
  fetch v_mycur  into v_lu_shebei_i;
  while v_mycur%found loop
    select count(*) into v_count from yong_hu y where y.fuwu_haoma=''||v_lu_shebei_i.fuwu_haoma||'';
     if v_count != 0 then
      ---删用户路由详情
     delete from yonghu_luyou_xiangqing x
      where x.luyou_id in
            (select id
               from yonghu_luyou l
              where l.yonghu_id in
                    (select id
                       from yong_hu y
                      where y.fuwu_haoma =
                            '' || v_lu_shebei_i.fuwu_haoma || ''))
                     and x.mokuai_leibie =''||v_lu_shebei_i.MOKUAI_LEIBIE||'';
           commit;
       --v_yonghu_id
        select y.id into v_yonghu_id from yong_hu y where y.fuwu_haoma=''||v_lu_shebei_i.fuwu_haoma||'';
        --v_jusuo_id
         select y.ju_suo into v_jusuo_id  from yong_hu y where y.fuwu_haoma=''||v_lu_shebei_i.fuwu_haoma||'';
         --v_luyou_id
        select l.id into v_luyou_id from yonghu_luyou l where l.yonghu_id=''||v_yonghu_id||'';
        --v_xu_hao
        select '0'||to_char(count(xu_hao)+1)||'.1' into v_xu_hao from yonghu_luyou_xiangqing x where x.luyou_id =''||v_luyou_id||'';
       --v_shebei_id
        select p.id into v_shebei_id from peixian_jia p where p.bian_hao=''||v_lu_shebei_i.SHEBEI_BIANMA||'';
        --v_shebei_bianma
        select p.bian_hao into v_shebei_bianma from peixian_jia p where p.bian_hao=''||v_lu_shebei_i.SHEBEI_BIANMA||'';
       --v_mokuai_id
        select m.id into v_mokuai_id from peixian_mokuai m where m.peixian_jia_id=''||v_shebei_id||'' and m.lie=''||v_lu_shebei_i.LIE||'' and m.kuai = ''||v_lu_shebei_i.KUAI||'' and m.shebei_dalei=''||v_lu_shebei_i.MOKUAI_LEIBIE||'';
      --v_mokuai_bianma
      select m.bian_hao into v_mokuai_bianma from peixian_mokuai m where m.peixian_jia_id=''||v_shebei_id||'' and m.lie=''||v_lu_shebei_i.LIE||'' and m.kuai = ''||v_lu_shebei_i.KUAI||'' and m.shebei_dalei=''||v_lu_shebei_i.MOKUAI_LEIBIE||'';
  
       --v_duankou_leibie 
       select z.shebei_dalei into v_duankou_leibie from peixian_duanzi z where z.mokuai_id=''||v_mokuai_id||'' and z.duanzi_hao=''||v_lu_shebei_i.DUANZI||'';
        --v_duankou_id
       select z.id into v_duankou_id from peixian_duanzi z where z.mokuai_id=''||v_mokuai_id||'' and z.duanzi_hao=''||v_lu_shebei_i.DUANZI||'';
      
      select count(*)  into v_count2  from yonghu_luyou_xiangqing x where x.mokuai_id =''||v_mokuai_id||'' and x.duankou_hao=''||v_lu_shebei_i.DUANZI||'';
 if v_count2 != 0 then
----判断位置是否被占用
insert into not_insert (
FUWU_HAOMA,
SHEBEI_BIANMA,
LIE,
KUAI,
DUANZI,
zhuangtai)
 select l.zhuanxian_hao,x.shebei_bianma,x.lie,x.kuai,x.duankou_hao,'已占用'
   from yonghu_luyou_xiangqing x, yonghu_luyou l
  where x.luyou_id = l.id
    and x.mokuai_id = '' || v_mokuai_id || ''
    and x.duankou_hao = '' || v_lu_shebei_i.DUANZI || '';
   commit;
else 
---插入路由详情
insert into yonghu_luyou_xiangqing s
  (ID,
   LUYOU_ID,
   XU_HAO,
   WEIZHI_LEIXING,
   WEIZHI_ID,
   JUSUO_ID,
   JIFANG_ID,
   WANG_LUO,
   SHEBEI_LEIBIE,
   SHEBEI_ID,
   SHEBEI_BIANMA,
   JI_LIE,
   JI_JIA,
   JI_KUANG,
   MOKUAI_LEIBIE,
   MOKUAI_ID,
   MOKUAI_BIANMA,
   LIE,
   KUAI,
   DUANKOU_LEIBIE,
   DUANKOU_ID,
   DUANKOU_HAO,
   LUOJI_ZIYUAN,
   LIANJIE_LEIXING,
   LUYOU_MIAOSHU,
   GONGDAN_HAO,
   CAOZUO_BUMEN,
   BANBEN_HAO,
   CAOZUO_YUAN,
   CAOZUO_SHIJIAN,
   CHUANGJIANREN,
   CHUANGJIAN_SHIJIAN)
values
  (seq_diaodu_luyou_xiangqing.nextval,
   v_luyou_id,
   v_xu_hao,
   '201',
   '',
   v_jusuo_id,
   '',
   '',
   v_lu_shebei_i.SHEBEI_LEIBIE,
   v_shebei_id,
   v_shebei_bianma,
   '',
   '',
   '',
   v_lu_shebei_i.MOKUAI_LEIBIE,
   v_mokuai_id,
   v_mokuai_bianma,
   v_lu_shebei_i.LIE,
   v_lu_shebei_i.KUAI,
   v_duankou_leibie,
   v_duankou_id,
   v_lu_shebei_i.DUANZI,
   '',
   '0',
   '' || v_shebei_id || '.' || v_duankou_leibie || '-3121566.44;-1;0;1',
   '',
   '',
   '1',
   'zmr',
   sysdate,
   '6471011',
   sysdate);
commit;
end if;
else
   insert into insert_log
   values (
   v_lu_shebei_i.fuwu_haoma,
   v_lu_shebei_i.shebei_bianma,
   v_lu_shebei_i.lie,
   v_lu_shebei_i.kuai,
   v_lu_shebei_i.duanzi);
   commit;
   r_res:= v_lu_shebei_i.fuwu_haoma||'用户不存在';
end if;
---查对端模块类别
select s.duiduan_mokuai_leibie into v_mokuai_leibie
 from shebei_duiduan_xinxi s
 where s.shebei_id =''||v_shebei_id||''
   and s.mokuai_leibie =''||v_lu_shebei_i.MOKUAI_LEIBIE||''
   and s.lie = ''||v_lu_shebei_i.lie||''
   and s.kuai =''||v_lu_shebei_i.kuai||''
   and s.qishi_duanzi =''||v_lu_shebei_i.duanzi||'';
---删对端路由详情
     delete from yonghu_luyou_xiangqing x
      where x.luyou_id in
            (select id
               from yonghu_luyou l
              where l.yonghu_id in
                    (select id
                       from yong_hu y
                      where y.fuwu_haoma =
                            '' || v_lu_shebei_i.fuwu_haoma || ''))
                     and x.mokuai_leibie =''||v_mokuai_leibie||'';
           commit;
----录对端
select s.duiduan_shebei_dalei into v_duiduan_shebei_dalei
 from shebei_duiduan_xinxi s
 where s.shebei_id =''||v_shebei_id||''
   and s.mokuai_leibie =''||v_lu_shebei_i.MOKUAI_LEIBIE||''
   and s.lie = ''||v_lu_shebei_i.lie||''
   and s.kuai =''||v_lu_shebei_i.kuai||''
   and s.qishi_duanzi =''||v_lu_shebei_i.duanzi||'';
  if v_duiduan_shebei_dalei != 20 then
insert into yonghu_luyou_xiangqing s (
ID                ,
LUYOU_ID          ,
XU_HAO            ,
WEIZHI_LEIXING    ,
WEIZHI_ID         ,
JUSUO_ID          ,
JIFANG_ID         ,
WANG_LUO          ,
SHEBEI_LEIBIE     ,
SHEBEI_ID         ,
SHEBEI_BIANMA     ,
JI_LIE            ,
JI_JIA            ,
JI_KUANG          ,
MOKUAI_LEIBIE     ,
MOKUAI_ID         ,
MOKUAI_BIANMA     ,
LIE               ,
KUAI              ,
DUANKOU_LEIBIE    ,
DUANKOU_ID        ,
DUANKOU_HAO       ,
LUOJI_ZIYUAN      ,
LIANJIE_LEIXING   ,
LUYOU_MIAOSHU     ,
GONGDAN_HAO       ,
CAOZUO_BUMEN      ,
BANBEN_HAO        ,
CAOZUO_YUAN       ,
CAOZUO_SHIJIAN    ,
CHUANGJIANREN     ,
CHUANGJIAN_SHIJIAN
)
select 
seq_diaodu_luyou_xiangqing.nextval,
v_luyou_id,
v_xu_hao,
'201',
'',
s.DUIDUAN_JUSUO,
'',
'',
s.duiduan_shebei_dalei,
 s.duiduan_shebei_id,
j.bian_hao,----
'',
'',
'',
 s.duiduan_mokuai_leibie,
s.DUIDUAN_MOKUAI_ID,
p.bian_hao,----
 s.duiduan_lie,
 s.duiduan_kuai,
s.DUIDUAN_DUANZI_LEIBIE,
s.DUIDUAN_DUANZI_ID,
 s.duiduan_qishi_duanzi,
'',
'0',
''||v_shebei_id||'.'||v_duankou_leibie||'-3121566.44;-1;0;1',
'',
'',
'1',
'zmr',
sysdate,
'6471011',
sysdate
 from shebei_duiduan_xinxi s
 left join peixian_mokuai p on s.duiduan_mokuai_id =p.id
 left join peixian_jia j on s.duiduan_shebei_id=j.id
 where s.shebei_id =''||v_shebei_id||''
   and s.mokuai_leibie =''||v_lu_shebei_i.MOKUAI_LEIBIE||''
   and s.lie = ''||v_lu_shebei_i.lie||''
   and s.kuai =''||v_lu_shebei_i.kuai||''
   and s.qishi_duanzi =''||v_lu_shebei_i.duanzi||'';
commit;
else 
  insert into yonghu_luyou_xiangqing s (
ID                ,
LUYOU_ID          ,
XU_HAO            ,
WEIZHI_LEIXING    ,
WEIZHI_ID         ,
JUSUO_ID          ,
JIFANG_ID         ,
WANG_LUO          ,
SHEBEI_LEIBIE     ,
SHEBEI_ID         ,
SHEBEI_BIANMA     ,
JI_LIE            ,
JI_JIA            ,
JI_KUANG          ,
MOKUAI_LEIBIE     ,
MOKUAI_ID         ,
MOKUAI_BIANMA     ,
LIE               ,
KUAI              ,
DUANKOU_LEIBIE    ,
DUANKOU_ID        ,
DUANKOU_HAO       ,
LUOJI_ZIYUAN      ,
LIANJIE_LEIXING   ,
LUYOU_MIAOSHU     ,
GONGDAN_HAO       ,
CAOZUO_BUMEN      ,
BANBEN_HAO        ,
CAOZUO_YUAN       ,
CAOZUO_SHIJIAN    ,
CHUANGJIANREN     ,
CHUANGJIAN_SHIJIAN
)
select 
seq_diaodu_luyou_xiangqing.nextval,
v_luyou_id,
v_xu_hao,
'201',
'',
s.DUIDUAN_JUSUO,
'',
'',
s.duiduan_shebei_dalei,
 s.duiduan_shebei_id,
j.bian_hao,----
'',
'',
'',
 s.duiduan_mokuai_leibie,
s.DUIDUAN_MOKUAI_ID,
p.bian_hao,----
 s.duiduan_lie,
 s.duiduan_kuai,
s.DUIDUAN_DUANZI_LEIBIE,
s.DUIDUAN_DUANZI_ID,
 s.duiduan_qishi_duanzi,
'',
'0',
''||v_shebei_id||'.'||v_duankou_leibie||'-3121566.44;-1;0;1',
'',
'',
'1',
'zmr',
sysdate,
'6471011',
sysdate
 from shebei_duiduan_xinxi s
 left join fenxian_he_duanzi p on s.DUIDUAN_DUANZI_ID =p.id
 left join fenxian_he j on s.duiduan_shebei_id=j.id
 where s.shebei_id =''||v_shebei_id||''
   and s.mokuai_leibie =''||v_lu_shebei_i.MOKUAI_LEIBIE||''
   and s.lie = ''||v_lu_shebei_i.lie||''
   and s.kuai =''||v_lu_shebei_i.kuai||''
   and s.qishi_duanzi =''||v_lu_shebei_i.duanzi||'';
commit;
end if;
----删除中间表
delete from lu_shebei_i where fuwu_haoma=''||v_lu_shebei_i.fuwu_haoma||'';
  fetch v_mycur  into v_lu_shebei_i;
end loop;
close   v_mycur;
commit;
end lu_shebei;

----未录入设备的  log 日志

select * from insert_log for update;          --无卡片
select * from not_insert for update;          --新录入地址已占用的服务号码

--录设备中间表

select * from lu_shebei_i for update;


---执行存储

declare
  v_res varchar2(254);
begin
    lu_shebei(v_res);
end;