在其他模式中重命名 Oracle Table

Rename Oracle Table in Other Schema

如何重命名其他架构下的table?例如,我的用户是 A,我想将 table_1 重命名为 table_1_temp,两者应该在同一架构下,假设架构 B。这可能吗?

我试过这个:

RENAME B.table_1 TO B.table_1_temp

RENAME B.table_1 TO table_1_temp

但出现此错误:

ORA-01765: specifying owner's name of the table is not allowed

ALTER 语句也不起作用:

ALTER TABLE B.table_1 RENAME TO table_1_temp

收到此错误:

ORA-01031: insufficient privileges

还有这个

ALTER TABLE B.table_1 RENAME TO B.table_1_temp
ORA-14047 ALTER TABLE|INDEX RENAME may not be combined with other operations

Rename Oracle Table or View 正如您在 post 上看到的那样,基于 Pop 的回答,RENAME 语句仅适用于同一架构中的 table。

ALTER TABLE B.table_1 RENAME TO table_1_temp 看起来是最好的解决方案,你试过给你的用户帐户更多权限吗?

“权限不足”是这里的关键词。除非您被允许,否则您不能修改其他用户的对象;当然你不能 - 如果有人搞砸了你的架构,那会是什么样子?

所有者本身不能授予该特权;这是一个 strong 并且用户 - 被授予这种特权 - 必须 trustworthy 因为它可以改变任何其他用户的 table s.

看看下面的例子。我的数据库中有两个用户:mike(拥有 table)和 scott(谁应该重命名 mike 的 table)。

迈克和他的 table:

SQL> show user
USER is "MIKE"
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BEDIENSTETER                   TABLE

连接为 scott 并尝试重命名 mike 的 table(rename 在这里不起作用;它应该在您自己的模式中使用):

SQL> connect scott/tiger
Connected.
SQL> alter table mike.bediensteter rename to test;
alter table mike.bediensteter rename to test
*
ERROR at line 1:
ORA-01031: insufficient privileges

对;权限不足。这是什么特权? ALTER ANY TABLE。所以让我们授予它,作为特权用户连接(例如我的 XE 数据库中的 SYS):

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> grant alter any table to scott;

Grant succeeded.

好的;回到 scott,重复操作:

SQL> connect scott/tiger
Connected.
SQL> alter table mike.bediensteter rename to test;

Table altered.

成功!让我们看看我们做了什么:

SQL> connect mike/lion
Connected.
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
TEST                           TABLE

SQL>

对; table 现已重命名。