我有一个Tablea,它有成百上千行,并且仍然在增长。在没有分区的情况下,速度明显下降。
因此,我创建了一个名为tableb的新表,使列与oracle sql developer中的table a(名称和类型)完全相同。(表A和表B在同一个数据库中,但不在同一个表中)我为表B另外创建了分区。
现在,我只想从table复制table中的所有数据,以便测试查询的速度。
为了测试具有分区的表的速度,我决定复制所有的数据,因为tableb与a具有相同的列。
insert into TableB ( select * from TableA);
我从上面的语句中期望的是要复制的数据,但是我得到了一个错误:
命令中从第1行开始时出错-
插入表格B(从表格A中选择*)
命令行错误:1列:1
错误报告-
SQL错误:ORA-54013:不允许对虚拟列执行插入操作
54013号。0000-“不允许对虚拟列执行插入操作”
*原因:试图将值插入虚拟列
*操作:在不为虚拟列提供值的情况下重新发出语句
我查过虚拟专栏
“查询时,虚拟列似乎是普通的表列,但它们的值是派生的,而不是存储在磁盘上。下面列出了定义虚拟列的语法。”
但是,表B中没有任何数据。tableB只有与tableA匹配的列,所以我不确定在没有派生内容的情况下如何派生列?
最佳答案
您可以使用查询
SELECT column_name, virtual_column
FROM user_tab_cols
WHERE table_name = 'TABLEA';
COLUMN_NAME VIRTUAL_COLUMN
----------- --------------
ID NO
COL1 NO
COL2 NO
COL3 YES
然后使用
INSERT INTO TABLEB(ID,COL1,COL2) SELECT ID,COL1,COL2 FROM TABLEA;
要从虚拟列中豁免,这些是从其他列的值中计算出来的。
关于sql - 如何使用新分区将数据从TableA复制到TableB?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54632611/