游標迴圈 事務

2021-10-07 06:45:11 字數 1701 閱讀 1329

begin

declare @a int,@error int    

declare @temp varchar(50)

declare @corp_code varchar(200)

declare @corp_name varchar(200)

declare @short_name varchar(200)

set @a=1

set @error=0

begin tran  --申明事務

--申明游標為od_id

declare order_cursor cursor

for (select [od_id] from [lzmisframe].[dbo].[sf_org_department]

where od_id like '%od%' and od_id !='od191226101101')

--開啟游標--

open order_cursor

--開始迴圈游標變數--

fetch next from order_cursor into @temp

while @@fetch_status = 0    --返回被 fetch語句執行的最後游標的狀態--

begin            

if not exists (select pk_corp from [zjk].[dbo].[zj_outside_corp] where pk_corp=@temp)

begin

insert into [zjk].[dbo].[zj_outside_corp] ([pk_corp]

,[corp_code]

,[corp_name]

,[short_name])

select [od_id],[od_code],[od_name],[od_shortname]   

from [lzmisframe].[dbo].[sf_org_department]

where od_id =@temp

endelse

begin

select @corp_code=[od_code],@corp_name=[od_name],@short_name=[od_shortname]   

from [lzmisframe].[dbo].[sf_org_department]

where od_id =@temp

update [zjk].[dbo].[zj_outside_corp] set corp_code=@corp_code,corp_name=@corp_name,short_name=@short_name 

where pk_corp =@temp

endset @a=@a+1

set @error= @error + @@error   --記錄每次執行sql後是否正確,0正確

fetch next from order_cursor into @temp   --轉到下乙個游標

end   

if @error=0

begin

commit tran   --提交事務

endelse

begin

rollback tran --回滾事務

endclose order_cursor  --關閉游標

deallocate order_cursor   --釋放游標

endgo

使用游標 游標FOR迴圈

游標for迴圈是在pl sql塊中使用游標最簡單的方式,它簡化了對游標的處理。當使用游標for迴圈時,oracle會隱含的開啟游標,提取游標資料並關閉游標。例子 顯示emp表所有雇員名及其工資 declare cursor emp cursor isselect ename,sal from emp...

游標,動態,for迴圈

小測 輸出各部門員工的部門名稱和工號 姓名,工資。要求 各部門工資最高的放在前面 在 dallas 地方的部門名稱後加上 三種實現方式 1 通過顯式游標 2 通過for迴圈 3 通過動態sql方式 顯示游標 declare type emp dept is record name dept.dnam...

sql 迴圈,游標

declare userid varchar 50 declare my cursor cursor 定義游標 for select userid from dbo.memberaccount 查出需要的集合放到游標中 open my cursor 開啟游標 fetch next from my c...