Oracle使用联接插入、更新、删除触发器
我正在尝试为子视图实现Oracle触发器,但我需要能够将子视图加入到它们的父视图中,以便执行角色权限检查 在SQL Server中,我可以这样做: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;
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));
。。。虽然不太确定最后一行是做什么的,或者等效的是什么。正是我想要的。谢谢