oracle数据库存储过程范例(使用游标进行循环)

本文介绍了一种使用游标进行循环操作的方法,通过遍历数据库表中的数据,找出特定作者的合作作者,并根据合作次数更新或插入数据到另一个临时表中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用游标进行循环。最后执行使用exec Counting;即可

create or replace PROCEDURE Counting AS
a_count number;
cursor authorListCursor is select ID from SCOPUS_AUTHOR ;
BEGIN
  delete from A_TEMP;
  for curAuthor in authorListCursor loop
    begin
--  找出某个作者有过合作的所有作者
      DECLARE cursor authorMapCursor is select distinct A.PUB_ID,A.AUTHOR_ID as aId,B.AUTHOR_ID as bId from SCOPUS_PUBLICATION_AUTHOR A,SCOPUS_PUBLICATION_AUTHOR B where A.AUTHOR_ID = curAuthor.id and B.PUB_ID = A.PUB_ID and B.AUTHOR_ID != curAuthor.id;
      begin
        for curMap in authorMapCursor loop
          begin
            select count(*) into a_count from A_Temp where ( AUTHOR1ID = curMap.aId and AUTHOR2ID = curMap.bId ) or ( AUTHOR1ID = curMap.bId and AUTHOR2ID = curMap.aId );
--          查看是否有合作记录 没有,则插入。 有,则更新Times  
            if(a_count = 0) then
              insert into A_TEMP(ID,AUTHOR1ID,AUTHOR2ID,TIMES) values (sequence_temp.NEXTVAL,curMap.aId,curMap.bId,1);
            else
              update A_TEMP set Times = (Times + 1) where ( AUTHOR1ID = curMap.aId and AUTHOR2ID = curMap.bId ) or ( AUTHOR1ID = curMap.bId and AUTHOR2ID = curMap.aId );
            end if;
          end;
        end loop;
      end;
    end;
  end loop;
END Counting;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值