【发布时间】:2019-05-13 21:29:24
【问题描述】:
在 Oracle 中,需要在存储过程中多次重用查询结果。想知道临时表是否是推荐的方式或其他方式......
首先我根据某些输入参数创建一个结果集。
然后进行一些检查以查看表 1 中是否出现任何结果集行。简单的连接和计数就足够了。 如果 count > 0 则返回。 如果 count == 0 则我将结果集中的选定值(基于某些条件)插入表 1。
是否应该使用临时表或其他东西以获得最佳性能?
谢谢,
【问题讨论】:
-
感谢 N. Kaufman。更多信息会有所帮助——插入表 1 后,您是否会继续进一步重新使用查询结果?从描述来看,它看起来只是一种用途。如果您只是有条件地插入到一个表中,则可能根本不需要 PLSQL(至少对于 insert-if-not-present 不需要);有条件的
INSERT或MERGE可能就足够了。另外,您要处理多少数据?这是数百/数千,还是数百万(您是否尝试过仅将其保存在内存中?) -
当然,感谢您的回复。我首先使用结果集(这是一个复杂且有点昂贵的查询,因此想要存储结果)来比较表 1 中是否存在数据。这是使用 #1。如果不存在,则我插入表 1,选择行从这个结果集中。这不是用途#2吗?再次感谢。
-
在此之后,我将在我的过程中进行更多插入等操作(但不使用此结果集)。数据不会超过 20 行,但获取它们的查询既复杂又昂贵。如果我已经正确解释了这个问题,请告诉我。再次感谢。
-
感谢 N. Kaufman。我刚才提到的概念是,可以在一个 sql 语句中检查匹配并将条件应用于插入。测试和基准测试始终是最好的判断方式,但乍一看,我认为临时表不是必需的(尽管它也可以工作,很好的基准测试)。可以将这些保存在过程中的内存中,或者只是进行条件插入。我将添加这些方法的一些示例,但可能还有其他方法。
-
我查看了我的场景,发现我将根据某些条件将数据从结果集中插入到 2 个表中。因此,如果我的结果集中有 20 行,在确认 Table1 中不存在任何内容后,我将在 Table1 中插入一些,在 Table2 中插入其余的
标签: oracle temp-tables