2009-02-04 9 views
1

J'ai besoin dans un environnement SQL que dans des circonstances spécifiques, toutes les références à table (ou vue) A dans une procédure utilisent réellement table (ou vue) B. Sur l'iSeries j'aurais utilisé la commande OVRDBF pour remplacer les références à table A avec la table B: FICHIER OVRDBF (A) TOFILE (B). Quel serait l'équivalent de cela en SQL? Est-ce qu'il y a un?Existe-t-il un équivalent de la commande iSeries OVRDBF dans SQL?

Mon but est de finir avec une procédure qui ignore le remplacement. Je ne veux pas de logique conditionnelle dans la procédure qui dirige le traitement à la table B lorsque certaines conditions sont remplies. La vision:

Dans des circonstances normales: Juste invoquer la procédure

Dans des circonstances alternatives spécifiques: Effectuer l'équivalent OVRDBF puis invoquez la procédure

Répondre

1

Vous n'êtes pas sûr de soutien de l'environnement SQL options qui:

Je crois que DB2 a une instruction CREATE ALIAS. Ecrivez le SQL sur l'alias.

Une autre possibilité: exécutez vos requêtes sur les vues: où vous feriez l'OVRDBF, déposez la vue et reconstruisez-la sur la table désirée.

+1

La seule chose que je n'aime pas cette réponse est que les deux options impliquent temporairement les références remplaçant pour tout le monde. En supposant que vous voudriez que d'autres processus fonctionnent sur les objets «normaux», peut-être que cela impliquerait un schéma supplémentaire ou quelque chose comme ça? – JBell6

1

Comme Ed mentionne si vous pouvez modifier votre procédure:

1) Créer un alias pour le fichier (A)

CREATE ALIAS XYZ FOR A 

2) Modifier la procédure de référence XYZ au lieu de A.

3) Lors de l'exécution de la procédure à utiliser le fichier B exécuter

DROP ALIAS XYZ; 
CREATE ALIAS XYZ FOR B; 
CALL PROCEDURE; 
DROP ALIAS XYZ; 
CREATE ALIAS XYZ FOR A; 

Si vous ne pouvez pas mo DIFY la procédure et que vous n'êtes pas inquiet pour un accès simultané à la table A, vous pouvez utiliser:

RENAME TABLE A TO C; 
CREATE ALIAS A FOR B; 
CALL PROCEDURE; 
DROP ALIAS A; 
RENAME TABLE C TO A; 
+0

Dans mon commentaire à Ed, j'ai exprimé une préoccupation concernant l'impact sur tous les utilisateurs et processus lors de l'utilisation de l'alias. Tout ne pointe-t-il pas vers ce que l'alias indique actuellement? Y a-t-il une façon de rendre l'approche plus spécifique à un seul utilisateur et/ou processus? – JBell6