Oracle使用联接插入、更新、删除触发器

Oracle使用联接插入、更新、删除触发器,oracle,join,triggers,Oracle,Join,Triggers,我正在尝试为子视图实现Oracle触发器,但我需要能够将子视图加入到它们的父视图中,以便执行角色权限检查 在SQL Server中,我可以这样做: ALTER TRIGGER [dbo].[ASetTrt_I] ON [dbo].[UCV_ASet_TRT] INSTEAD OF Insert AS BEGIN SET NOCOUNT ON;

我正在尝试为子视图实现Oracle触发器,但我需要能够将子视图加入到它们的父视图中,以便执行角色权限检查

在SQL Server中,我可以这样做:

ALTER TRIGGER [dbo].[ASetTrt_I] ON [dbo].[UCV_ASet_TRT]
                INSTEAD OF Insert AS   
                BEGIN   
                    SET NOCOUNT ON;    
                    IF EXISTS (SELECT 1 from INSERTED i INNER JOIN [Analysis_Sets] p on i.[key] = p.[ID] 
                        WHERE ([dbo].IsMemberOf(p.[UpdateRole]) <> 1 and [dbo].IsMemberOf('db_owner') <> 1))
                            RAISERROR ('Update failed due to insufficient permission',11,1)
                    INSERT INTO [Set_Trts] ( [ID], [Name], [key], [f_lTreatmentKey], [f_lOrder] ) 
                    SELECT 
                    inserted.[ID], inserted.[Name], inserted.[key], inserted.[f_lTreatmentKey], inserted.[f_lOrder]                               
                    FROM inserted 
                    INNER JOIN [Sets] parentT 
                        on inserted.[key] = parentT.[ID]
                    WHERE (([dbo].IsMemberOf('db_owner')=1) or ([dbo].IsMemberOf(parentT.[UpdateRole])=1))
                END  
我可以在Oracle中做些什么来复制join功能吗

我试过选择from:New,SS选择from插入的方式,但似乎不起作用


谢谢。

您不需要加入。:new伪行刚刚可用,可以像记录类型一样被引用。它不是一个类似于表的结构,仅在for-each-row触发器中可用。因此,插入的内容类似于:

INSERT INTO Analysis_Set_Trts ( ID, Name, f_lAnalysisSetKey, f_lTreatmentKey,
  f_lOrder ) 
SELECT :new.ID, :new.Name, :new.f_lAnalysisSetKey, :new.f_lTreatmentKey,
  :new.f_lOrder                            
FROM Analysis_Sets parentT 
WHERE parentT.ID = :new.f_lAnalysisSetKey
AND ((IsMemberOf('db_owner')=1) or (IsMemberOf(parentT.UpdateRole)=1));

。。。虽然不太确定最后一行是做什么的,或者等效的是什么。

正是我想要的。谢谢