在Oracle pl / sql中,我连接了几个表并插入到另一个表中,这将导致数千/ Lakhs或者可能是数百万。可以插入
insert into tableA
select * from tableB;
是否因为行数而有失败的可能性? 或者,如果没有更多记录,是否有更好的方法来插入值。
先谢谢
答案 0 :(得分:2)
嗯,机器内部的一切都是有限的,所以如果那个选择返回太多行,那肯定是行不通的(尽管必须有maaany行,这个数字取决于你的存储和内存大小,你的操作系统,也许还有其他事情。)
如果您认为您的查询可以超过限制,则批量插入,并在每批后提交。当然,您需要知道,如果您决定需要取消该过程的50%的插入内容必须执行某些操作(因为rollback
在此处没有用处)。
答案 1 :(得分:1)
我建议的步骤有所不同,因为当您使用SQL或PL / SQL在一个SQL语句中加载更多数据时,性能通常会提高:
analyze table tableB compute statistics for table for all columns for all indexes
之后的user_tables)。在分区表上运行时,您可能需要考虑允许(子)分区将工作分布在一起的不同方案。通过从文本文件加载来使用SQL * Loader时,您可能也使用不同的方法,例如直接路径将预格式化的数据块添加到数据库而不使用SQL引擎,而不是让RDBMS处理SQL。
答案 2 :(得分:0)
要创建有限数量的行,您可以使用ROW_NUM这是一个伪列。
例如,从另一个表中创建10,000行的表,可以使用50,000行。
insert into new_table_name select * from old_table_name where row_num<10000;