2010-01-29 6 views
0

j'ai une table X dans tablespace T1 et une table Y dans tabelspace T2. (Oracle DB)déclenchement pour mettre à jour l'objet dans différentes tablespace

je créer un déclencheur dans tablespace T1 qui va, sur l'événement de mise à jour d'une colonne C dans le tableau X, mettre à jour la colonne D dans la table Y (espace de table T2). Étant donné qu'ils se trouvent dans des tablespaces différentes, ma première question est: est-ce que cela peut être fait du tout?

Et si oui, comment cela peut-il être fait? Quels privilèges sont requis pour faire une telle chose?

+0

Par "tablespace" voulez-vous dire "schéma"? –

Répondre

0

Cela n'a pas tellement à voir avec l'espace de table. Vous avez cependant besoin de privilèges pour insérer dans la table (et cette colonne particulière), et si la table Y est dans un autre schéma que le déclencheur, vous devez utiliser le nom de table qualifié:. (Dans Oracle, le schemaname est le nom de l'utilisateur qui est propriétaire de l'objet)

CREATE TRIGGER aur_x 
AFTER UPDATE OF c ON x 
FOR EACH ROW 
UPDATE schema_containing_y.Y SET D = ... 
; 

EDIT:
juste pour moi que vous pourriez ne pas être familier avec la distinction entre schéma et tablespace, voici donc un courte explication. Un tablespace est un conteneur de stockage logique: dedfines les fichiers de données, les caractéristiques de croissance, les types de journalisation, etc. Les tablespaces peuvent être utilisées pour stocker les données associées aux objets de schéma (tables, index, définitions de vues, etc.). Un schéma est une collection d'objets (comme des tables, des vues, des pacakages, etc.). Ces objets appartiennent à un utilisateur, et pour autant que je sache, dans Oracle, le schéma a un nom identique à celui de l'utilisateur. les objets. Les objets dépendent du stockage fourni par un ou plusieurs espaces de table, mais les espaces de table eux-mêmes ne sont pas des objets de schéma.

Généralement, un schéma est utilisé pour regrouper des objets fonctionnellement liés (par exemple, vous créez généralement un schéma pour une application). Les tablespaces peuvent également être créées spécialement pour stocker tous les objets d'une application, mais vous pouvez également créer différents espaces de table pour des tables avec des caractéristiques différentes.

Normalement, les développeurs d'applications ne devraient pas trop se soucier des espaces de table. Votre administrateur de base de données les configurera généralement d'une manière qui convient à des choses comme le plan de sauvegarde.

+0

Roland, tout d'abord merci pour une réponse dans un si court préavis. Cependant, votre solution n'a pas résolu le problème. La situation est que X et Y (de mon exemple) sont dans des tablespaces différents (également des schémas differnet et appartiennent à différents utilisateurs) mais sur la même instance de base de données, le déclencheur, comment vous l'avez défini, ne fonctionne pas. Peut-être que je dois avoir des permissions pour mettre à jour une table dans un tablespace à partir d'un trigger dans l'autre tablespace. – trivunm

+0

milostrivun: voir la 2ème phrase de ma réponse: "Vous avez besoin de prvilèges pour insérer int la table (et cette colonne particulière)" - J'ai écrit INSERT Au lieu de UPDATE, mon mauvais. En ce qui concerne les tablespace: comme un souligné, Oracle ne se soucie pas de l'espace de table dans lequel se trouve la table tant que vous avez les privilèges appropriés sur la table. Les privilèges pour l'espace de table sont nécessaires uniquement lors de la création de tables. –

+0

J'ai compris! Il s'agissait de privilèges, quand je leur ai donné raison. Ça a marché! Merci encore Roland! – trivunm

Questions connexes