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
    具有相同的名称,因此你会遇到问题,因为你把全局名称空间搞得一团糟。我看到了我的问题不清楚,我想知道的是我的当前模式是否有占位符?我知道默认值是我的模式,但如果设置了公共同义词,则不会。因此,简短的回答是“否”。没有占位符用于自己的模式。