我正在使用Oracle 19c学习PLsql。我想知道-为什么sys user
可以删除表中的tables
而不是特定的columns
?我找到了this workaround,您可以在其中为特定的SCHEMA创建表的副本,在此新创建的表中删除该列,删除原始表,最后在没有SCHEMA / USER ROLE的情况下创建(复制的)表的另一个副本。
还有另一种,让我们说出一种更平滑的方法来完成此操作吗?还是Oracle以这种方式实现它的任何特定原因?
谢谢。
SQL> SHOW USER;
USER is "SYS"
________________________________________
SQL> ALTER TABLE employees DROP (gender);
ALTER TABLE employees DROP (gender)
*
ERROR at line 1:
ORA-12988: cannot drop column from table owned by SYS
_______________________________________
SQL> DROP TABLE employees;
Table dropped.
“为了维护数据字典的完整性,SYS模式中的表仅由数据库操作。它们绝不能由任何用户或数据库管理员修改。您不得在SYS模式中创建任何表。”
https://docs.oracle.com/database/121/ADMQS/GUID-CF1CD853-AF15-41EC-BC80-61918C73FDB5.htm#ADMQS12003
尝试按此顺序:
ALTER TABLE table_name DROP COLUMN column_name;