在其他模式中重命名 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 现已重命名。
如何重命名其他架构下的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 现已重命名。