你可以像变量一样使用oracle表空间吗?

时间:2010-08-03 13:33:38

标签: oracle plsql oracle10g

我是Oracle新手,我有两个表空间,一个用于开发,一个用于实时。

是否有一种方法可以在包含表空间名称的Package头上有一个变量,然后可以在包头中定义的过程中使用它?

我需要这样做,因为我有一个tableSpace(TableSpaceA)需要通过程序查询TableSpaceB中的表。 Dev TableSpaceB有一个不同的表空间名称,因此我希望我可以在Package头中声明一个像

这样的变量

Tablespace temp = "TableSpaceName"
然后
Select * from temp.TableName

当我将更改滚动到实时环境时,最后更改“TableSpaceName”?

1 个答案:

答案 0 :(得分:4)

表空间是一种管理方式:它们是一种逻辑分组存储的方式,无需担心文件路径或其他管理员。


根据您修改后的问题,显然Tony是对的,您的意思是架构

架构是用户拥有的对象集。当用户A拥有的过程需要引用模式B拥有的对象时,有两种方法可以执行此操作。第一种方法是对模式名称进行硬编码。

select * 
from user_b.emp;

这通常很好,但在您描述的场景中不起作用,其他架构在其他环境中具有不同的名称(C而不是B)。

解决这个问题的方法是使用同义词。

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必须在Production中授予权限。