创建存储过程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;
...全文
246 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
把 Close Cur_Items;
去掉试试
我按F8执行,就说已完成,耗时0.04秒,,没其他的提示了,也没出错
[Quote=引用 8 楼 的回复:]

要引起无效的具体错误,无效是现象。。
[/Quote]
大哥们主要看看我的语法有没有问题:
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;
BenChiM888 2012-09-28
  • 打赏
  • 举报
回复
要引起无效的具体错误,无效是现象。。
执行这条创建语句时没问题,提示已完成,耗时0.04秒
但是我要是点右键测试或者用exec运行,就说无校,像这样:
BenChiM888 2012-09-28
  • 打赏
  • 举报
回复
把具体错误沾出来

[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:

在游标 Cursor Cur_Items Is
。。。

和begin之前要加分号。

Cursor Cur_Items Is
select * from tab ;

begin
你的逻辑处理。
end;

应该这样。


大哥,加了,还是不行啊
[/Quote]
[Quote=引用 4 楼 的回复:]

在游标 Cursor Cur_Items Is
。。。

和begin之前要加分号。

Cursor Cur_Items Is
select * from tab ;

begin
你的逻辑处理。
end;

应该这样。
[/Quote]

大哥,加了,还是不行啊
Alex20150716 2012-09-28
  • 打赏
  • 举报
回复
在游标 Cursor Cur_Items Is
。。。

和begin之前要加分号。

Cursor Cur_Items Is
select * from tab ;

begin
你的逻辑处理。
end;

应该这样。

我执行这条创建语句时没报错,但是在Procedure列表里是打个红X,无效的
BenChiM888 2012-09-28
  • 打赏
  • 举报
回复

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

Begin

fw0124 2012-09-28
  • 打赏
  • 举报
回复
什么错误?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧