2013-06-11 112 views
2

我想問一下關於代碼相當於在SQL Server光標功能相當於在SQL Server

我工作的一個項目,其中我們將轉換UNIX批次由於數據庫遷移窗口批次。由於我在shell腳本和oracle的東西,我很難在Windows端工作。

我的問題是關於oracle sql使用的CURSOR。

有人可以幫助我轉換下面

sampleanimal.sql以下示例查詢:

declare cursor getGM is 
select dog as d, cat as c, fish as f 
    from animals 

begin 
    for dr in getGM loop 

    UPDATE zoo 
     SET dogs = dr.d 
      cats = dr.c 
      fishes = dr.f 
     ; 

    end loop; 
end; 
/

commit; 

quit; 

回答

1

可以有更有效的或簡單的方法,我只是沒有測試寫道

DECLARE @d nvarchar(10); 
DECLARE @c nvarchar(10); 
DECLARE @f nvarchar(10); 

DECLARE getGM CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR 
select dog as d, cat as c, fish as f from animals 

OPEN getGM 
FETCH NEXT FROM getGM INTO @d, @c, @f 

WHILE @@FETCH_STATUS = 0 
Begin 
UPDATE zoo 
     SET dogs = @d 
      cats = @c 
      fishes = @f 

FETCH NEXT FROM getGM INTO @d, @c, @f 
End 

CLOSE getGM 
DEALLOCATE getGM 

可以檢查示例從msdn

2

Rea在這種情況下,你不需要使用遊標。試試這樣 -

UPDATE z 
SET 
     dogs = a.dog 
    , cats = a.cat 
    , fishes = a.fish 
FROM zoo z 
JOIN animals a ON z.id = a.id