2011-05-26 88 views
0

我試圖將一些Oracle存儲過程轉換爲MSSQL我做了一些基本的SP,但我在使用遊標轉換SP時遇到了麻煩。將Oracle存儲過程轉換爲MSSQL

這裏有一個例子: -

create or replace procedure PR_DELETE_FOLDER(indexedFolder NUMBER,indexedPath VARCHAR2,userCode VARCHAR2,folpath VARCHAR2,idpath VARCHAR2,folderid NUMBER) as 


cursor c1(pfolid in NUMBER) is 
    SELECT folder.PARENTFOLDER, folder.FOLDERNAME, folder.FOLDERID ,sys_connect_by_path(folder.FOLDERNAME,'>>') FOLDERPATH , sys_connect_by_path(folder.FOLDERID,'>>') FOLDERIDPATH 
    FROM T_FOLDER folder 
    START WITH folder.PARENTFOLDER =pfolid 
    CONNECT BY PRIOR folder.FOLDERID=folder.PARENTFOLDER; 

cursor c2(folid in NUMBER) is SELECT DOCUMENTID,DOCUMENTNAME from T_DOCUMENT where folder = folid; 

begin 
for r1 in c1(folderid) loop 
     update T_FOLDER set last_update=sysdate,STATUS=0 where folderid=r1.FOLDERID; 
     update T_FOLDER set foldercount = foldercount-1 where folderid = r1.PARENTFOLDER; 
    -- insert into T_FOLDER_AUDIT values(SEQ_FOLDER_AUDIT.nextval,r1.FOLDERID,'Delete a folder',userCode,sysdate,sysdate,userCode,userCode,1); 
     insert into t_historical_event values(SEQ_HISTORICAL_EVENT.nextval,r1.FOLDERID,null,'com.affno.adms.folder.Folder',null,'Updated',userCode,r1.FOLDERNAME,sysdate,sysdate,sysdate,userCode,userCode,1); 

       for r2 in c2(r1.FOLDERID) loop 

       update T_DOCUMENT set LAST_UPDATE = sysdate,ISUPDATEINDEXES=1,MODIFIEDBY=userCode,STATUS=0 where documentid = r2.DOCUMENTID; 
       update T_FOLDER set doccount=doccount-1 where folderid=r1.FOLDERID; 
       insert into T_DOCUMENT_AUDIT values(SEQ_DOC_AUDIT.nextval,'delete',r2.DOCUMENTID,'Original',sysdate,sysdate,userCode,userCode,1,userCode); 
       insert into t_historical_event values(SEQ_HISTORICAL_EVENT.nextval,r2.DOCUMENTID,null,'com.affno.adms.document.Document',null,'Deleted',userCode,r2.DOCUMENTNAME,sysdate,sysdate,sysdate,userCode,userCode,1); 

       end loop; 

end LOOP; 

end; 

我不熟悉MSSQL遊標,所以我就對這個問題毫無頭緒。

謝謝。

回答

0

有MSDN文章中的例子: DECLARE CURSOR (Transact-SQL)

USE AdventureWorks2008R2; 

GO 
DECLARE vend_cursor CURSOR 
    FOR SELECT BusinessEntityID, Name, CreditRating FROM Purchasing.Vendor 
OPEN vend_cursor 
FETCH NEXT FROM vend_cursor; 
0

你可以嘗試爲此,轉換應用程序製成,如http://www.convert-in.com/ora2mss.htm - 不幸的是>,在$ 3原則並不便宜。

+0

廢料。這個特定的程序不會轉換存儲過程,所以需要多一點工作。 – 2011-05-26 13:28:43