Oracle 甲骨文授权变更序列

Oracle 甲骨文授权变更序列,oracle,sequence,alter,grant,Oracle,Sequence,Alter,Grant,我有一个向用户授予alter sequence。但是我必须指定模式名来更改序列,否则返回的错误是序列不存在。是否可以以不必指定架构名称的方式进行授权?我可以在不指定架构名称的情况下执行select/insert/update。您可以: ALTER SESSION SET CURRENT\u SCHEMA myschema 然后,您可以引用所有不带限定符的项。听起来您是以与序列所有者不同的用户身份连接到数据库的。在这种情况下,您需要在序列前面加上模式,否则您所谈论的序列就不明确了 如果您作为所有者

我有一个
向用户授予alter sequence
。但是我必须指定
模式名
来更改序列,否则返回的错误是
序列不存在
。是否可以以不必指定架构名称的方式进行授权?我可以在不指定架构名称的情况下执行
select/insert/update

您可以:

ALTER SESSION SET CURRENT\u SCHEMA myschema


然后,您可以引用所有不带限定符的项。

听起来您是以与序列所有者不同的用户身份连接到数据库的。在这种情况下,您需要在序列前面加上模式,否则您所谈论的序列就不明确了

如果您作为所有者用户连接到数据库,则不需要架构限定符:

SQL> create sequence foo;

Sequence created.

SQL> grant alter on foo to hr;

Grant succeeded.

名称解析和访问权限是两个独立的概念。
grant
允许您更改模式,但您仍然受到所在命名空间的限制。有四种方法可以使一个架构中的名称在另一个架构中解析:

  • 使用对象名称引用模式:
    从dual中选择schema\u name.sequence\u name.nextval
  • 更改当前会话以解析名称,就像您在其他架构中一样:
    Alter session set current\u schema=schema\u name
  • 为当前架构中的对象创建同义词:
    为架构创建同义词序列名称。序列名称
  • 为对象创建公共同义词:
    为schema\u name.sequence\u name创建公共同义词sequence\u name

  • 我发现我们已经有了一个公共同义词,
    alter sequence
    仍然不能工作,当我试图修改它时,我发现
    sequence不存在
    错误。