Oracle: таблица всегда «существует» после удаления таблицы - PullRequest
0 голосов
/ 04 марта 2020

Я использую Oracle, и у меня есть странная вещь.

Я сбросил таблицу, используя:

drop table t_my_table, и подтвердил.

Но когда я запускаю select * from t_my_table, он показывает данные, как если бы таблица не удалялась.

Я попытался отключиться и снова подключиться, он по-прежнему показывает данные, когда я выбираю.

И когда я снова пытаюсь набрать:

drop table t_my_table, он говорит мне, что эта таблица не существует.

Но если я снова запускаю select, данные всегда есть.

Как это возможно?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 04 марта 2020

Вы имеете в виду этот случай?

create view t_my_table as
select 'I''m here' as txt  from dual;

drop table t_my_table;

ORA-00942: table or view does not exist

Но

select * from t_my_table;

TXT     
--------
I'm here

решение наиболее вероятной причины

select OBJECT_TYPE from user_objects where object_name = 'T_MY_TABLE';

OBJECT_TYPE        
-------------------
VIEW

Вы определили представление (или другой объект типа, отличного от TABLE), который нельзя удалить с помощью DROP TABLE, но можно выбрать .

Простая регистрация USER_OBJECTS OBJECT_TYPE. В качестве альтернативы вы также можете увидеть SYNONYM, как предложено в другом ответе.

Обратите внимание, что это , а не MATERIALIZED VIEW, как если бы вы пытались отбросить материализованное представление с DROP TABLE другим появляется сообщение об ошибке:

ORA-12083: must use DROP MATERIALIZED VIEW to drop T_MY_TABLE
2 голосов
/ 04 марта 2020

Что это возвращает?

select * from all_synonyms
where synonym_name = 'T_MY_TABLE';

Я подозреваю, что существует синоним T_MY_TABLE, который указывает на таблицу в другой схеме.

0 голосов
/ 04 марта 2020

Возможно, происходит что-то другое. Нормальным регистром будет:

SQL>      create table t1 as select 1 a from dual;

Table T1 created.

SQL>      drop table t1;

Table T1 dropped.

SQL>      select * from t1;

Error starting at line : 22 in command -
     select * from t1
Error at Command Line : 22 Column : 20
Error report -
SQL Error: ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:
  1. Так что же было сообщение после таблицы удаления?
  2. Действительно ли t_my_table таблица?

Попробуйте select * from all_objects where lower(object_name) = 't_my_table'

0 голосов
/ 04 марта 2020
drop table t_my_table purge;

Укажите PURGE, если вы хотите удалить таблицу и освободить пространство, связанное с ней, за один шаг. Если вы укажете PURGE, то база данных не помещает таблицу и ее зависимые объекты в корзину. ... Использование этого условия равносильно тому, что сначала отбросить таблицу, а затем удалить ее из корзины. Этот пункт позволяет вам сохранить один шаг в процессе. Он также обеспечивает повышенную безопасность, если вы хотите предотвратить попадание чувствительных материалов в корзину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...