当前位置: 代码迷 >> Oracle管理 >> select * from tab;时出现的咄咄怪事
  详细解决方案

select * from tab;时出现的咄咄怪事

热度:486   发布时间:2016-04-24 04:17:03.0
select * from tab;时出现的怪事


=======================================================================
当我执行select * from tab;出现的如图的问题,实际上存在数据库的就4张表,但却出现了那么多奇怪的表名
而且用for update做删除时


求解决方案
------解决方案--------------------
这些表都是回收站的表,
可以用 purge recyclebin 清除回收站
drop table 时,在后面加上purge 可直接彻底清除,不进回收站
------解决方案--------------------
引用:


=======================================================================
当我执行select * from tab;出现的如图的问题,实际上存在数据库的就4张表,但却出现了那么多奇怪的表名
而且用for update做删除时


求解决方案

根据你的截图,tab应该是一个视图,不是一个表。
更新视图有以下限制:

键值保存表
        如果连接视图中的一个“基表的键”(主键、唯一键)在它的视图中仍然存在,
        并且“基表的键”仍然是“连接视图中的键”(主键、唯一键);
        即,某列在基表中是主键
------解决方案--------------------
唯一键,在视图中仍然是主键
------解决方案--------------------
唯一键
        则称这个基表为“键值保存表”。

                        键值保存表中的列是可以更新的;
                        如果在定义连接视图时使用了WITH CHECK OPTION 选项,
                        则连接视图中的连接列(一般就是“共有列”)和基表中的“其他共有列”是“不可”更新的,
                        连接列和共有列之外的其他列是“可以”更新的
------解决方案--------------------
tab 是一个视图,定义的语句如下: 另外  tab 也是 oracle 的保留字

create or replace view sys.tab
(tname, tabtype, clusterid)
as
select o.name,
      decode(o.type#, 2, 'TABLE', 3, 'CLUSTER',
             4, 'VIEW', 5, 'SYNONYM'), t.tab#
  from  sys.tab$ t, sys."_CURRENT_EDITION_OBJ" o
  where o.owner# = userenv('SCHEMAID')
  and o.type# >=2
  and o.type# <=5
  and o.linkname is null
  and o.obj# = t.obj# (+);


里面还包含你删除过的表
  相关解决方案