sql - 如何使用新分区将数据从 TableA 复制到 TableB?

标签 sql database oracle oracle11g virtual-column

我的 TableA 有数十万行,而且大小还在增加。没有分区,速度下降得非常明显。

因此,我创建了一个名为 TableB 的新表,其中的列与 Oracle SQL Developer 中的 TableA 完全一样(名称和类型)。 (TableA 和 TableB 在同一个数据库中,但不是同一个表)我另外为 TableB 创建了分区。

现在,我只想将 TableA 中的所有数据复制到 TableB 中,以测试查询速度。

为了测试带分区的表的速度,我决定复制所有数据,因为 TableB 与 A 具有所有相同的列。

insert into TableB ( select * from TableA);

我从上面的语句中期望的是要复制的数据,但我得到了错误:

错误从行开始:命令中的 1 - 插入 TableB(从 TableA 选择 *) 命令行错误:1 列:1 错误报告 - SQL 错误:ORA-54013:不允许对虚拟列执行 INSERT 操作 54013.0000 - “不允许对虚拟列执行 INSERT 操作” *原因:试图将值插入虚拟列 *行动:重新发布声明而不为虚拟列提供值

我查了一下Virtual Columns好像是

“当查询时,虚拟列看起来是普通的表列,但它们的值是派生的而不是存储在磁盘上。下面列出了定义虚拟列的语法。”

但是,我在 TableB 中没有任何数据。 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/

相关文章:

mysql - 通过 Web 服务在 MySQL 和 SQLite 之间传输数据的选项

c# - 合并具有相同主键的行并计算新值的平均值

java - oracle jdbc 驱动版本疯狂

c++ - 使用 C++ 和 OCCI 编写 CLOB

ios - 简单文本数据收集 iOS 应用程序的基础知识。数据存储在哪里?

GRANT CREATE JOB、CREATE EXTERNAL JOB 后,DBMS_SCHEDULER 缺少 Oracle 权限,ORA-27486

sql - Azure 逻辑应用 'Execute SQL Query' 连接器

sql - 如何在SQL Server中获取完整年份的周数、开始日期和结束日期?

sql - 确定每个用户当天的第一个事件

java - 处理来自数据库的空字符串的最佳实践(在 Java 中)