sql - PL/SQL 新手 - 返回多个结果集问题

标签 sql database oracle plsql oracle10g

好的 - 我对 SQL Server 有相当广泛的背景,但之前我只接触过 Oracle。好吧,推已经到了紧要关头,我需要创建一个相对复杂的查询。本质上,它在 T-SQL 中归结为:

SELECT Col1 
INTO #tmpTable
FROM Table1
WHERE Col3 = @paramValue

SELECT Col1
FROM #tmpTable

SELECT OtherCol
FROM Table2
INNER JOIN #tmpTable 
  ON Table1.Col1 = Table2.fkCol1

这个序列的原因是因为对 Table1 的初始调用非常繁重(约 5 秒的运行时间),因为它是针对我们的数据仓库的高度复杂的调用。我想在单独的调用中返回 Table2 的结果,因为 Table2 中可能有 5-10 条记录对应 Table1 中的每一条记录,这使我的前端数据透视更容易。

我知道我能做到

SELECT Table1.Col1, Table2.OtherCol
FROM Table1
LEFT JOIN Table2 
  ON Table1.Col1 = Table2.fkCol1

然后在前端重新规范化数据(仅处理 Col1 的第一条记录,然后处理所有 OtherCol 记录,直到发现新的 Col1)

不过,我不是数据库专家,所以我不确定哪种方法更好。从开发者的角度来看,第一个解决方案对我来说更容易使用。它还(直觉)看起来性能更高,因为不必返回 Table1 与 Table2 耦合的“厚”结果。 Table1 将返回约 1200 行,宽度约 2kb。 Table2 明显更精简(约 20 字节宽),但行数更多 (6000-12000)。

所以,最终我的问题是,哪种解决方案最适合 PL/SQL 环境,如果是第一个,那么最好的解决方法是什么?全局临时表/光标/子选择/什么?

最佳答案

我会使用连接。它更容易编码和阅读,并且比三个单独的选择更快。如果您只选择 Col1,则完整行的“粗”度并不重要。

关于sql - PL/SQL 新手 - 返回多个结果集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344434/

相关文章:

mysql - 不同表之间的条件连接以组合不同的列

c# - 使用 SqlConnection 打开 DataReader 错误

php - MySQL -PHP 插入 DATETIME

javascript - 如何缩短代码或将其存储在数据文件中

mysql - mysql中日期和时间的单独字段

oracle - 如何填充具有默认值的用户定义记录?

c# - 如何有效处理.Net 中 Oracle 缓慢的 CLOB 读取?

3 种不同测试的首次尝试的 MYSQL 平均分数 - IN GROUP BY

MySQL 嵌套联合替代方案

c# - 使用 ODP.NET 的第一次查询总是很慢