Можете ли вы использовать табличные пространства Oracle как переменные - PullRequest
0 голосов
/ 03 августа 2010

Я новичок в Oracle, у меня есть два табличных пространства, одно для dev и одно для live.

Есть ли способ, которым я могу иметь переменную в заголовке Package, которая содержит имя табличного пространства, которое затем можетиспользовать из процедур, определенных в заголовке пакета?

Мне нужно сделать это, поскольку у меня есть одно tableSpace (TableSpaceA), которое должно запрашивать таблицы в TableSpaceB с помощью процедур.Dev TableSpaceB имеет другое имя табличного пространства для жизни, поэтому я надеялся, что смогу объявить в заголовке пакета переменную типа

Tablespace temp = "TableSpaceName"
Тогда
Select * from temp.TableName

И, наконец, измените "TableSpaceName", когда я перенесу свои изменения в живую среду?

1 Ответ

4 голосов
/ 03 августа 2010

Табличные пространства являются административной вещью: они представляют собой способ логической группировки хранилища без необходимости беспокоиться о пути к файлу или другой администрации.


Из вашего пересмотренного вопроса очевидно, что Тони прав и что вы имеете в виду схема .

Схема - это набор объектов, принадлежащих пользователю,Когда процедура, принадлежащая пользователю A, должна ссылаться на объект, принадлежащий схеме B, это можно сделать двумя способами.Первый способ - жестко закодировать имя схемы.

select * 
from user_b.emp;

Обычно это нормально, но не сработает в описываемом вами сценарии, где другая схема имеет другое имя с другим именем в других средах (C, а неБ).

Чтобы обойти эту проблему, нужно использовать синонимы.

select * 
from not_my_emp;

В DEV синонимом будет:

create synonym not_my_emp for user_b.emp
/

, тогда как в производстве это будет

create synonym not_my_emp for user_c.emp
/

Таблица может даже иметь другую таблицу в производстве, это не имеет значения.Синоним действует как интерфейс для защиты наших объектов от неопрятных деталей других схем.

Обратите внимание, что синоним не предоставляет привилегии для базового объекта.Это означает, что USER_B должен предоставлять привилегии для EMP в разработке, а USER_C должен предоставлять привилегии для производства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...