2010-08-03 5 views
-1

Je suis nouveau à Oracle, j'ai deux tablespaces un pour le dev et un pour le live.Pouvez-vous utiliser les espaces table oracle comme variable

Y a-t-il un moyen pour que je puisse avoir une variable sur un en-tête de paquet qui contient un nom d'espace de table, qui peut alors être utilisé à partir des procédures définies dans l'en-tête du paquet?

Je dois faire cela car j'ai un tableSpace (TableSpaceA) qui doit interroger des tables dans TableSpaceB via des procédures. La Dev TableSpaceB a un nom différent de l'espace de table pour vivre donc j'espérais pouvoir déclarer dans le paquet d'en-tête une variable comme

Tablespace temp = "TableSpaceName"
Puis
Select * from temp.TableName

Et enfin changer « nom_espace_table » quand je roule ma changements à l'environnement en direct?

+3

Voulez-vous dire "schéma" plutôt que "tablespace"? –

+0

Eh bien PL/SQL les affiche comme tablespaces, donc je suppose que tablespace et pas schéma ??? – jpgooner

+0

Je ne comprends pas ce que vous entendez par "PL/SQL les affiche comme tablespaces ..." PL/SQL est un langage, pas un outil d'affichage ?? Mais vous signifiez clairement "schéma" et non "tablespace". –

Répondre

4

Les tablespaces sont une solution administrative: elles permettent de regrouper logiquement le stockage sans avoir à se préoccuper des chemins de fichiers ou d'autres administrateurs.


De votre question révisée, il est évident que Tony est juste et ce que vous entendez est schéma.

Un schéma est l'ensemble des objets appartenant à un utilisateur. Lorsqu'une procédure appartenant à l'utilisateur A doit référencer un objet appartenant au schéma B, il existe deux façons de le faire. La première consiste à coder en dur le nom du schéma.

select * 
from user_b.emp; 

C'est généralement bien, mais ne fonctionnera pas dans le scénario que vous décrivez, où l'autre schéma a un nom différent nom différent dans d'autres environnements (C plutôt que B).

Le problème consiste à utiliser des synonymes.

select * 
from not_my_emp; 

En DEV le synonyme serait:

create synonym not_my_emp for user_b.emp 
/

alors que dans la production, il serait

create synonym not_my_emp for user_c.emp 
/

Le tableau pourrait même avoir une autre table dans la production, il n'a pas d'importance . Le synonyme sert d'interface pour protéger nos objets des détails désordonnés des autres schémas.

Notez qu'un synonyme n'accorde pas de privilèges sur l'objet sous-jacent. Cela signifie que USER_B doit accorder des privilèges sur EMP en développement et que USER_C doit accorder des privilèges dans Production.

+0

Salut APC J'ai ajouté plus de détails pour vous dans le message original – jpgooner

+0

Ouais, bien sûr, j'ai essentiellement deux tablespaces, dans un espace de table j'ai un paquet, qui a un certain nombre de proceures. Dans cet espace de table, j'ai besoin d'interroger une table dans un autre espace de table qui semble fonctionner correctement.Je souhaite mettre ces modifications dans mon environnement en direct, mais pour ce faire, je devrais changer le nom de l'espace de table que j'interroge. J'apprécie vos patients comme vous pouvez le dire oracle est très nouveau pour moi – jpgooner

+0

APC et Tony, merci beaucoup pour votre aide c'est exactement ce que je cherche Merci – jpgooner

Questions connexes