Oracle10g 触发器更新不同表空间中的对象

Oracle10g 触发器更新不同表空间中的对象,oracle10g,triggers,tablespace,Oracle10g,Triggers,Tablespace,我在表空间T1中有一个表X,在表空间T2中有一个表Y(Oracle DB) 我必须在表空间T1中创建一个触发器, 在更新表X中的C列时, 更新表Y(表空间T2)中的D列 因为它们在不同的表空间中,所以我的第一个问题是,这到底能做到吗 如果是的话,那怎么做呢?做这样的事情需要什么特权?它与表空间没有太多关系。但是,您确实需要特权才能插入到表(以及该特定列)中,如果表Y位于触发器之外的另一个架构中,则需要使用限定表名:。(在Oracle中,schemaname是拥有对象的用户的名称) 编辑: 我突然

我在表空间T1中有一个表X,在表空间T2中有一个表Y(Oracle DB

我必须在表空间T1中创建一个触发器, 在更新表X中的C列时, 更新表Y(表空间T2)中的D列

因为它们在不同的表空间中,所以我的第一个问题是,这到底能做到吗


如果是的话,那怎么做呢?做这样的事情需要什么特权?

它与表空间没有太多关系。但是,您确实需要特权才能插入到表(以及该特定列)中,如果表Y位于触发器之外的另一个架构中,则需要使用限定表名:。(在Oracle中,schemaname是拥有对象的用户的名称)

编辑:
我突然想到,您可能不熟悉模式和表空间之间的区别,所以这里有一个简短的解释。表空间是一个逻辑存储容器:它定义数据文件、增长特征、日志类型等。然后,表空间可用于存储与模式对象(表、索引、视图定义,以及包和存储过程定义等)关联的数据

模式是对象(如表、视图、数据包等)的集合。这些对象由用户拥有,据我所知,在oracle中,模式的名称与拥有这些对象的用户的名称相同。对象依赖于一个或多个表空间提供的存储,但表空间本身不是模式对象

通常,模式用于对功能相关的对象进行分组(例如,您通常会为一个应用程序创建一个模式)。也可以创建表空间来存储一个应用程序的所有对象,但也可以为具有不同特征的表创建不同的表空间


通常,应用程序开发人员不应该太担心表空间。您的DBA通常会以便于备份计划等操作的方式设置它们。

您所说的“表空间”实际上是指“模式”吗?罗兰,首先感谢您在这么短的时间内回复。然而,你的解决方案并没有解决问题。情况是X和Y(在我的示例中)位于不同的表空间(也不同的模式,属于不同的用户),但在同一个数据库实例上,触发器(您如何定义它)不起作用。也许我必须获得授权才能从一个表空间中的触发器更新另一个表空间中的表。milostrivun:请参阅我回答的第二句:“您确实需要prvileges来插入表(以及该特定列)”-我写的是insert而不是update,我的错。关于表空间:正如a所指出的,只要您对表拥有适当的权限,oracle就不关心表所在的表空间。只有在表空间中创建表时才需要表空间的权限。明白了!这是关于特权的,当我把它们设置好的时候,它起作用了!再次感谢罗兰!
CREATE TRIGGER aur_x
AFTER UPDATE OF c ON x
FOR EACH ROW
UPDATE schema_containing_y.Y SET D = ...
;