oracle資料庫儲存過程範例(使用遊標進行迴圈)
阿新 • • 發佈:2019-02-17
使用遊標進行迴圈。最後執行使用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;