Sql 是否可以独立于公共同义词选择当前_模式中的表
有没有一种方法,即使存在公共同义词,也只从自己的模式中选择数据 类似于:Sql 是否可以独立于公共同义词选择当前_模式中的表,sql,oracle,scope,schema,synonym,Sql,Oracle,Scope,Schema,Synonym,有没有一种方法,即使存在公共同义词,也只从自己的模式中选择数据 类似于:Select*from current_schema.Table1 更多信息: 我在schema1的表1中找到了一个公共同义词。 现在我有一个选择table1的包(在schema2上),我想选择schema2的table1而不是schema1。 我的问题是,当用户在服务器上使用包时,我不知道该如何更改标识符 编辑 我发现我的问题不清楚,我想知道的是我当前的模式是否有占位符 目前,我需要这样做: 从schema2.表1中选择*
Select*from current_schema.Table1
更多信息:
我在schema1的表1中找到了一个公共同义词。现在我有一个选择table1的包(在schema2上),我想选择schema2的table1而不是schema1。
我的问题是,当用户在服务器上使用包时,我不知道该如何更改标识符 编辑
我发现我的问题不清楚,我想知道的是我当前的模式是否有占位符 目前,我需要这样做:
从schema2.表1中选择*
我想要的是这样的:
从MySchema.table 1中选择*
或
从此表1中选择*
或
从当前模式中选择*表1
oracle中是否存在类似的内容?。当数据库解析查询时,它将按以下优先顺序查找与语句中的标识符匹配的对象:
模式中该名称的对象
该名称的私有同义词(在架构中)
那个名字的公众集会
但是,如果您想弄清楚,当然可以在表引用前面加上特定的模式名。这有助于向查看代码的其他人传达您的意图
此外,如果您的模式中有一个表TABLE1,并且有一个名为TABLE1的公共同义词指向另一个模式中您要查询的表,那么您必须使用该另一个模式作为引用的前缀
“我想知道的是,我的当前帐户是否有占位符
“模式”
不,因为没有必要。默认值始终为当前模式。就是这个声明,
SQL> select * from t23;
。。。将始终从当前模式中的T23中进行选择,前提是该模式具有具有该名称的表(或专用同义词)
请注意,可以使用ALTER SESSION命令更改当前架构的值:
SQL> alter session set current_schema=scott;
现在,如果执行上一个select,它将从SCOTT.T23返回结果,前提是SCOTT模式有这样一个表,并且您对它有特权。你可以等一会儿
我试图了解您遇到了什么问题,我注意到您的场景是一个用户执行另一个用户拥有的包。现在,默认情况下,SCHEMA2
拥有的包将针对SCHEMA2
拥有的对象运行,并使用授予SCHEMA2
的其他对象的权限
但是PL/SQL为我们提供了改变这一点的能力:AUTHID子句确定包是以定义者的权限(即包所有者)还是调用者的权限运行(当前用户。因此,如果SCHEMA2
在运行SCHEMA1
时使用AUTHID current_user
定义了他们的包,那么表2的实例将是SCHEMA1
范围内的实例,它将是属于SCHEMA1
的实例或由公共同义词表示的实例
。一般来说,不要使用公共同义词。这样做应该有一个非常具体、很好的理由。从你的问题来看,schema1
和schema2
上的表1
具有相同的名称,因此你会遇到问题,因为你把全局名称空间搞得一团糟。我看到了我的问题不清楚,我想知道的是我的当前模式是否有占位符?我知道默认值是我的模式,但如果设置了公共同义词,则不会。因此,简短的回答是“否”。没有占位符用于自己的模式。