当前位置: 代码迷 >> Oracle开发 >> 请问一个Oracle存储过程有关问题
  详细解决方案

请问一个Oracle存储过程有关问题

热度:12   发布时间:2016-04-24 06:41:06.0
请教一个Oracle存储过程问题
我想通过存储过程实现一个这样的功能,存储过程接受一个输入参数(array类型),然后循环遍历array中的元素,根据每个元素去另外一个表查询,如果在另外一个表存在就更新count+1,否则就新插入一条记录!存储过程输出一个参数(number类型),插入或更新的条数,代码如下,不知可行否?请指教,谢谢!

create or replace procedure INSER_OR_UPDATE_WORLD_TOTAL(arr in varchar_array, result out number)
as
begin
  for i in arr.first...arr.last LOOP
  select count(*) into v_ret from world_total where sysid =arr(i);
  if(v_ret > 0)
    begin
       result+=update world_total set count=count+1 where sysid =arr(i)
    end
  else 
     begin
       result+=insert into world_total(SYSID,COUNT) values(arr(i),1)
     end
end LOOP

------解决方案--------------------
引用:
我想通过存储过程实现一个这样的功能,存储过程接受一个输入参数(array类型),然后循环遍历array中的元素,根据每个元素去另外一个表查询,如果在另外一个表存在就更新count+1,否则就新插入一条记录!存储过程输出一个参数(number类型),插入或更新的条数,代码如下,不知可行否?请指教,谢谢!

create or replace procedure INSER_OR_UPDATE_WORLD_TOTAL(arr in varchar_array, result out number)
as
begin
  for i in arr.first...arr.last LOOP
  select count(*) into v_ret from world_total where sysid =arr(i);
  if(v_ret > 0)
    begin
       result+=update world_total set count=count+1 where sysid =arr(i)
    end
  else 
     begin
       result+=insert into world_total(SYSID,COUNT) values(arr(i),1)
     end
end LOOP

应该先定义type varchar_array为数组类型
------解决方案--------------------
入门菜鸟表示刚知道ORACLE里也能用数组的……学习一下
  相关解决方案