перевести с SQL Server на Oracle - PullRequest
       2

перевести с SQL Server на Oracle

1 голос
/ 25 августа 2010

Я надеялся, что один из вас, экспертов Oracle, сможет помочь мне с этим. У меня есть следующий скрипт SQL Server, но мне нужно переписать его для Oracle:

USE mydb
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE trigger mydb . [CONNECTERTRIGGER] on mydb . [DtreeNotify]
FOR INSERT AS
BEGIN

IF @@ROWCOUNT=0
  RETURN

SET IDENTITY_INSERT mydb.DTreeNotify2 ON

INSERT INTO mydb.DTreeNotify2 
   (NID,NType,DataID,VersionNum,OwnerID,SubType)
SELECT inserted.NID, 
       inserted.NType, 
       inserted.DataID,
       inserted.VersionNum,
       mydb.Dtree.OwnerID, 
       livelink.DTree.SubType
  FROM inserted, livelink.DTree
 WHERE inserted.DataID = livelink.DTree.DataID;

END

Я думаю, @@ rowcount становится sql% rowcount, но я борюсь с битом identity_insert. Я не думаю, что что-то еще должно измениться. Мнения?

1 Ответ

2 голосов
/ 25 августа 2010

Не беспокойтесь о бите IDENTITY_INSERT, способ, которым это делается в Oracle, настолько отличается, что в любом случае такая опция не нужна.Ищите «ПОСЛЕДОВАТЕЛЬНОСТЬ», чтобы узнать больше об этом.

Здесь мы идем:

CREATE trigger "CONNECTERTRIGGER"
  AFTER INSERT on "DtreeNotify"
  FOR EACH ROW
begin
  insert into DTreeNotify2 (NID,NType,DataID,VersionNum,OwnerID,SubType)
    select :new.NID, :new.NType, :new.DataID, :new.VersionNum,
           Dtree.OwnerID, livelink.DTree.SubType
      from livelink.DTree
      where :new.DataID=livelink.DTree.DataID;
end;

Комментарии: Я предполагаю, что Dtree.OwnerID - это переменная пакета, которую вы можете прочитать напрямую.Как вы можете видеть, существует запись :new, которая содержит одну вставленную запись (этот триггер вызывается для каждой вставляемой записи).

Редактировать: изменил триггер BEFORE на триггер AFTER

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...