3

多年来,我一直是跨多个平台的数据库开发人员,但这是我在 Oracle 的第一份繁重的工作。一个星期以来,我一直试图弄清楚如何将一组结构从 SQL Server 移动到 Oracle,而每条路径似乎都以一堵墙结束。

在 SQL Server 中,我有一个查询,它获取一组记录并进行一些简单的计算,然后将结果转置到一个临时表,其中第二个查询获取临时表并执行一些相当复杂的计算和列的重新分组。这些过程包含在第三个查询中,该查询使用不同的参数集(用户输入)调用第二个查询,以构建图形包的数据块。

那么,问题是——Oracle 中这样的链的“最佳实践”是什么?

这里使用Oracle的人说“正确的方法”是建立一个表并将数据放入表中然后传递。这肯定是错误的——我不敢相信我必须建立和维护一个空表数据库来保存各种计算的中间结果。

我认为sys_refcursor这是完美的并以这种方式构建了第一个查询(我不关心必须将 SQL 构建为字符串然后执行,但我可以忍受它)。但是当我进行第二个查询时,我无法将其加载/操作sys_refcursor为表,而是必须循环将每个值分配给一个变量,然后在计算后将这些值重新连接到一个sys_refcursor到转到下一步。这肯定是错的。

我最终承认我可以接受一些我会根据需要启动然后在完成时丢弃的表对象。但是现在我找不到任何指向后期实例化的材料。看来我仍然必须单独构建表格并将其作为工件留在结构中。

那么 - Oracle 中将数据集上的计算和转换块链接在一起的最佳方法是什么?我只是没有找到正确的文档吗?还是我走错了路?或者我是否需要将 Oracle 视为一种过程语言,只需将数据加载到一个数组中(你能构建一个数组吗?),然后,当我完成后,将它推回一个sys_refcursor以释放到调用程序。

4

1 回答 1

2

有很多方法可以在 PL/SQL 中实现 ETL 过程。

pipeline table function最接近你写的 -这是一个很好的教程

您还可以使用dbms_scheduler( doc ) 创建一系列操作。

但就个人而言,我更像是一个简单的愚蠢的kynda 家伙,所以我给你的建议是在 pl/sql 中编写一个简单的包。

你可能会觉得有用的书

Oracle® 数据库数据仓库指南

PL/SQL 语言参考 - 调整 PL/SQL 应用程序以提高性能

于 2013-04-23T14:56:05.180 回答