|
24
|
| Sathyajith Bhat ron tornambe · 技术社区 · 17 年前 |
|
|
1
31
我建议使用Select选项,因为游标需要更长的时间。
|
|
|
2
24
一般的经验法则是,如果您可以使用一条SQL语句而不是PL/SQL来完成,那么您应该这样做。它通常会更有效率。
例如
上述方法的优点是最小化了SQL和PL/SQL之间的上下文切换。Oracle11g还更好地支持记录表,这样就不必为每一列提供单独的PL/SQL表。
|
|
|
3
5
如果回滚段/撤消段可以适应事务的大小,那么选项2更好。如果您没有所需的回滚能力,并且必须将较大的插入拆分为较小的提交,以便不会出现回滚/撤消段过小的错误,则选项1非常有用。 |
|
|
4
5
像您的第二个选项那样的简单插入/选择更可取。对于第一个选项中的每个插入,您需要一个从pl/sql到sql的上下文切换。使用trace/tkprof运行每个程序并检查结果。 如Michael所述,如果回滚无法处理该语句,那么让dba为您提供更多。磁盘很便宜,而通过多次插入数据得到的部分结果可能相当昂贵。(几乎没有与插入关联的撤消操作。) |
|
|
5
3
您将插入多少条记录?
|
|
|
6
2
正如你通过阅读其他答案所看到的,有很多选择。如果您只是在做<10k行您应该使用第二个选项。 简而言之,对于大约>一路跑10公里就可以说是a<10万。这是一个灰色区域。许多老家伙会在大的后退段吠叫。但老实说,硬件和软件已经取得了惊人的进步,如果只运行几次代码,您就可以在很多记录中使用选项2。否则,您可能应该每隔1k-10k左右的行提交一次。下面是我使用的一个片段。我喜欢它,因为它很短,我不必声明游标。此外,它还具有批量收集和forall的优点。
我找到了这个 link 来自oracle站点,详细说明了这些选项。 |
|
7
0
您可以使用:
批量收集,以及所有被调用的
因为PL/SQL
它提高了性能。 |
|
|
8
0
我使用CREATETABLESQL,因为我发现它几乎和批量加载一样快 例如,下面的create table语句用于暂存数据,将列强制转换为所需的正确数据类型: 创建表sales_dataTemp作为select 将(第1列为日期)选为销售季度, .... 从…起 这个临时表准确地反映了我的目标表的结构,它是按站点进行列表分区的。 然后,我与丹佛分区进行分区交换,得到了一个新的数据集。 |
|
|
maddy · 如何根据oracle SQL中的某一列值进行排名 3 年前 |
|
|
kiric8494 · 显示以元音开头和结尾的城市名称 4 年前 |
|
|
Franz Biberkopf · Oracle:组合子查询和聚合函数 4 年前 |
|
|
BitLauncher · 甲骨文-如何模拟位列和布尔和/或? 4 年前 |
|
|
Arifullah · 如何从oracle中的列中删除特定的初始字符? 4 年前 |
|
|
Anar · Oracle SQL用户定义函数 4 年前 |
|
|
user1312312 · 如何为一组表编写通用触发器? 4 年前 |