2010-09-27 5 views
1

(J'avais déjà répondu à cette question lorsque j'ai trouvé la réponse, je la posterai donc puisque Google ne m'a pas donné de réponses utiles).Oracle - émulant un déclencheur sur SELECT

Je cherche à créer quelque chose comme un déclencheur qui se déclenche sur un Oracle SELECT. L'objectif est de supprimer des lignes spécifiques du résultat du SELECT en fonction de l'utilisateur qui effectue le SELECT.

Cela doit fonctionner sur la version Standard Edition d'Oracle 11g (pas Enterprise), donc je n'ai pas accès à la sécurité au niveau de la ligne ou à l'audit à grain fin.

J'ai une application existant (très) qui a des milliers de embarqués sélectionne tous les sens, donc idéalement, je ne veux pas avoir à changer tous ...

Le tableau I » Je cherche à travailler avec un million de lignes dedans, ce qui me limite un peu du point de vue de la performance.

+0

Bien joué. Cependant, cette question n'a vraiment rien à voir avec les déclencheurs. Vous vouliez simplement contrôler le résultat d'une requête. La solution la plus appropriée est donc la vue que vous avez créée. –

Répondre

2

Comme je ne cherchais vraiment qu'à modifier la sélection sur un tableau particulier, la réponse pour moi était de renommer la table existante et de créer une vue avec le nom d'origine.

+0

Ensuite, vous devez créer des déclencheurs INSTEAD OF INSERT et DELETE sur votre vue pour rester compatible. – Benoit

+0

@Benoit - Pas nécessairement. Une vue simple qui filtre uniquement les lignes d'une table peut généralement être mise à jour dans Oracle. Bien qu'il soit certainement possible de créer une vue qui filtre les lignes qui ne peuvent pas être mises à jour, auquel cas les déclencheurs seraient nécessaires, vous devrez probablement faire quelque chose comme une jointure non-clé-préservée à une autre table pour que cela soit problème. –

+0

@Justin Cave Vous avez raison. Dans mon cas, la vue est très simple - elle ressemble à 'select * from emp où ()'. Il est updateable. –

0

Je pense, simple si la condition dans le bloc PL SQL peut résoudre votre problème.

+0

Bien sûr. Mais je maintiens une très grande application - en fait une application énorme et plusieurs applications plus petites - et il y a plusieurs centaines, probablement des milliers d'endroits d'où cette table est accédée. Si je devais y aller en ajoutant ma condition si simple à tous, je serais soit en colère ou à la retraite avant d'avoir fini :) –

Questions connexes