ORACLE База данных - Почему SYS Пользователь может удалять таблицы, но не столбцы? - PullRequest
0 голосов
/ 22 февраля 2020

Я учусь PL sql с Oracle 19 c. Мне было интересно - почему sys user может сбросить tables, но не указать c columns в таблице? Я нашел этот обходной путь , где вы создаете копию таблицы для указанной c SCHEMA, удаляете столбец в этой вновь созданной таблице, удаляете исходную таблицу и, наконец, создаете еще одну копию (скопированную). ) -таблица без роли SCHEMA / USER.

Есть ли другой, скажем, более плавный способ сделать это? 1017 *? Или есть какая-то конкретная c причина 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.

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

"Чтобы сохранить целостность словаря данных, таблицы в схеме SYS управляются только базой данных. Они никогда не должны изменяться каким-либо пользователем или администратором базы данных. Вы не должны создавать таблицы в схеме SYS."

https://docs.oracle.com/database/121/ADMQS/GUID-CF1CD853-AF15-41EC-BC80-61918C73FDB5.htm#ADMQS12003

0 голосов
/ 24 февраля 2020

Попробуйте поставить в следующем порядке:

ALTER TABLE table_name DROP COLUMN column_name;

Если в таблице есть данные, она не работает.

...