24
|
Sathyajith Bhat ron tornambe · 技术社区 · 15 年前 |
![]() |
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列为日期)选为销售季度, .... 从…起 这个临时表准确地反映了我的目标表的结构,它是按站点进行列表分区的。 然后,我与丹佛分区进行分区交换,得到了一个新的数据集。 |
![]() |
vytaute · 返回表类型时Oracle函数中的类型错误 3 年前 |
![]() |
BetaRide · Oracle架构用户无法在过程中创建表 7 年前 |
|
F.donoso · 嵌套的隐式游标未在数据中清除 7 年前 |
![]() |
ADH · 如何在网格中调用过程和输出结果 7 年前 |