首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

创建存储过程select赋值给游标的有关问题!

2012-12-14 
创建存储过程select赋值给游标的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!各位大哥帮忙看看这个哪里有问题,创建无

创建存储过程select赋值给游标的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!
各位大哥帮忙看看这个哪里有问题,创建无效,小弟找不出,谢谢各位哈!!!

--存储过程
Create Or Replace Procedure Proc_Link_Cc_Dba As
  v_Data_Id       Res_Alarm_Drive@Res_Alarm.Data_Id%Type; --流水号 
  v_Region_Id     Res_Alarm_Drive@Res_Alarm.Region_Id%Type; --区域ID 
  v_Region_Name   Res_Alarm_Drive@Res_Alarm.Region_Name%Type; --区域名称 
  v_Station_Id    Res_Alarm_Drive@Res_Alarm.Station_Id%Type; --小区ID 
  v_Station_Name  Res_Alarm_Drive@Res_Alarm.Station_Name%Type; --小区名称 
  v_Res_Type_Id   Res_Alarm_Drive@Res_Alarm.Res_Type_Id%Type; --资源类型ID  2510
  v_Res_Type_Name Res_Alarm_Drive@Res_Alarm.Res_Type_Name%Type; --资源类型  OLT设备预警
  v_Res_Level     Res_Alarm_Drive@Res_Alarm.Res_Level%Type; --设备等级  null 
  v_Res_Id        Res_Alarm_Drive@Res_Alarm.Res_Id%Type; --资源ID  prop_three o
  v_Res_Name      Res_Alarm_Drive@Res_Alarm.Res_Name%Type; --资源名称 prop_one o
  v_Alarm_Total   Res_Alarm_Drive@Res_Alarm.Alarm_Total%Type; --预警资源总量   prop_six o
  v_Alarm_On      Res_Alarm_Drive@Res_Alarm.Alarm_On%Type; --预警资源占用量    stat_value o
  v_Alarm_Per     Res_Alarm_Drive@Res_Alarm.Alarm_Per%Type; --预警资源占用比   stat_value o
  v_Main_Region   Res_Alarm_Drive@Res_Alarm.Main_Region%Type; --维护分公司      sf_get_desc_china(mnt_spec) o
  v_Alarm_Tv      Res_Alarm_Drive@Res_Alarm.Alarm_Tv%Type; --预警阀值   70
  v_Process_State Res_Alarm_Drive@Res_Alarm.Process_State%Type; --流程状态  0  1  2  初始  处理中  归档
  v_Alarm_Sw      Res_Alarm_Drive@Res_Alarm.Alarm_Sw%Type; --预警开关   0  1   启用  关闭
  v_Alarm_Date    Res_Alarm_Drive@Res_Alarm.Alarm_Date%Type; --预警时间  prop_nine o
  v_Flag          Res_Alarm_Data.Alarm_Id%Type;

  Cursor Cur_Items Is
    Select a.Data_Id, i.Region_Id, i.Region_Name, s.Station_Id, s.China_Name, a.Prop_Three, a.Prop_One, a.Prop_Six,
           a.Stat_Value,a.Stat_Value, Sf_Get_Desc_China(s.Mnt_Spec), a.Prop_Nine
    From Res_Alarm_Data a, Rme_Eqp p, Spc_Room m, Spc_Station s, Spc_Region i
    Where p.Posit_Id = m.Room_Id And m.Station_Id = s.Station_Id And s.Region_Id = i.Region_Id And
          a.Alarm_Id = '000161010000000000000856' And a.Delete_State = '0' And a.Prop_Three = p.Eqp_Id And
          a.Prop_Nine = (Select Max(Aa.Prop_Nine)
                         From Res_Alarm_Data Aa
                         Where Aa.Delete_State = '0' And Aa.Alarm_Id = '000161010000000000000856') And


          (Exists (Select 2
                   From Res_Alarm_Drive@Res_Alarm Mm
                   Where Mm.Res_Id = a.Prop_Three And Mm.Process_State = '2' And Mm.Alarm_Sw = '0') Or Not Exists
           (Select 2 From Res_Alarm_Drive@Res_Alarm Mm Where Mm.Res_Id = a.Prop_Three))
    
     Begin
    
     v_Data_Id := ''; --流水号 o
  v_Region_Id     := ''; --区域ID o
  v_Region_Name   := ''; --区域名称 o
  v_Station_Id    := ''; --小区ID o
  v_Station_Name  := ''; --小区名称 o
  v_Res_Type_Id   := 2510; --资源类型ID  2510
  v_Res_Type_Name := 'OLT设备预警'; --资源类型  OLT设备预警
  v_Res_Level     := ''; --设备等级  null 
  v_Res_Id        := ''; --资源ID  prop_three o
  v_Res_Name      := ''; --资源名称 prop_one o
  v_Alarm_Total   := ''; --预警资源总量   prop_six o
  v_Alarm_On      := ''; --预警资源占用量    stat_value o
  v_Alarm_Per     := ''; --预警资源占用比   stat_value o
  v_Main_Region   := ''; --维护分公司      sf_get_desc_china(mnt_spec) o
  v_Alarm_Tv      := 70; --预警阀值   70
  v_Process_State := 0; --流程状态  0  1  2  初始  处理中  归档
  v_Alarm_Sw      := 0; --预警开关   0  1   启用  关闭
  v_Alarm_Date    := ''; --预警时间  prop_nine o

  Open Cur_Items;
  Loop 
  Fetch Cur_Items Into v_Data_Id, v_Region_Id, v_Region_Name, v_Station_Id,v_Station_Name,v_Res_Id,v_Res_Name,v_Alarm_Total,
  v_Alarm_On,v_Alarm_Per,v_Main_Region,v_Alarm_Date;
  Exit When Cur_Items%Notfound;

  Insert Into Res_Alarm_Drive@Res_Alarm Values(v_Data_Id, v_Region_Id, v_Region_Name, v_Station_Id, v_Station_Name,
                                               v_Res_Type_Id, v_Res_Type_Name, v_Res_Level, v_Res_Id, v_Res_Name,
                                               v_Alarm_Total, v_Alarm_On, v_Alarm_Per, v_Main_Region, v_Alarm_Tv,
                                               v_Process_State, v_Alarm_Sw, v_Alarm_Date);



  End Loop;
  Close  Cur_Items;
  Commit;
  
End Proc_Link_Cc_Dba;
[最优解释]


(Select 2 From Res_Alarm_Drive@Res_Alarm Mm Where Mm.Res_Id = a.Prop_Three));
--少个分号同学
    
  Begin


[其他解释]
 在游标 Cursor Cur_Items Is
。。。

和begin之前要加分号。

 Cursor Cur_Items Is
select * from tab ;

begin
你的逻辑处理。
end;

应该这样。


[其他解释]
把具体错误沾出来

引用:
引用:

在游标 Cursor Cur_Items Is
。。。

和begin之前要加分号。

Cursor Cur_Items Is
select * from tab ;

begin
你的逻辑处理。
end;

应该这样。


大哥,加了,还是不行啊


[其他解释]
什么错误?
[其他解释]
要引起无效的具体错误,无效是现象。。
[其他解释]
我执行这条创建语句时没报错,但是在Procedure列表里是打个红X,无效的
[其他解释]
引用:
 在游标 Cursor Cur_Items Is
。。。

和begin之前要加分号。

 Cursor Cur_Items Is
select * from tab ;

begin
你的逻辑处理。
end;

应该这样。


大哥,加了,还是不行啊
[其他解释]
执行这条创建语句时没问题,提示已完成,耗时0.04秒
但是我要是点右键测试或者用exec运行,就说无校,像这样:

[其他解释]
大哥们主要看看我的语法有没有问题:
Create Or Replace Procedure Proc_Link_Cc_Dba As
 v_Data_Id       Res_Alarm_Drive@Res_Alarm.Data_Id%Type; --流水号 
 :

 Cursor Cur_Items Is
   select a.Data_Id...  from ....;
 
 Begin
  
   Open Cur_Items;
   Loop
   Fetch Cur_Items Into v_Data_Id ...
   Exit When Cur_Items%Notfound;

     Insert Into Res_Alarm_Drive@Res_Alarm Values(...)....;
   End Loop;
   Close  Cur_Items;
   Commit;
End Proc_Link_Cc_Dba;
[其他解释]
我按F8执行,就说已完成,耗时0.04秒,,没其他的提示了,也没出错
引用:
要引起无效的具体错误,无效是现象。。


[其他解释]
把 Close Cur_Items;
  去掉试试

热点排行