Преобразование хранимой процедуры Oracle в MSSQL - PullRequest
0 голосов
/ 26 мая 2011

Я пытаюсь преобразовать некоторые хранимые процедуры Oracle в MSSQL. Я сделал несколько базовых SP, но у меня возникают проблемы при конвертации SP с помощью курсоров.

вот пример: -

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, поэтому не имею понятия об этой проблеме.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

Вы можете попробовать приложение для конвертации, сделанное для этой цели, например http://www.convert -in.com / ora2mss.htm -> К сожалению, за 49 долларов это не дешево.

0 голосов
/ 26 мая 2011

В статье msdn есть примеры: ОБЪЯВИТЬ КУРСОР (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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...