关于将PL / SQL应用程序划分为多个单元

时间:2012-02-17 01:28:31

标签: sql oracle plsql oracle11g

这是我的应用程序工作流程。

我有一个ref cursor,其中包含我的所有员工ID s ..这只是一个识别号码。

但现在我想为每个员工获取很多信息......(从ref cursor获取)。这不仅仅是数据,但也有很多计算的派生数据。通过游标和程序等更容易完成的派生......

例如,员工驻留在部门78的所有时间间隔的总和...(可能只是每个员工的一个列)。

所以我认为 可以用非常大来实现这一点(很大,我的意思是很难维护,难以理解,难以优化,难以重用,refactor..etc等)SQL查询,但这确实不是我要做的事,除非作为真正的最后手段。

所以我试图找到使用所有 PL / SQL 的方法将其分成尽可能多的单独单元(可能是函数或程序)以便能够以简单而优雅的方式处理这个......

我认为合并数据集(可能是ref cursors)的一些方法可以解决我的问题......到目前为止,我已经在互联网上看了一些东西,有些东西看起来很有希望,即流水线 ......虽然我不确定这是我需要的......

总而言之,我所需要的是想法我需要的一些方法来组合生成的ref cursor(一个非常大的表,一列用于 ID 和大约40个其他列,每个列都有关于 ID 的所有者的特定信息。),使用许多过程,然后我可以发送回我的服务器端应用并处理它。 (在这种情况下导出为ex​​cel。)

我真的很茫然..希望有更多经验的人可以帮助我。

FA

1 个答案:

答案 0 :(得分:1)

我不确定这是不是你想要的,或者你需要经常运行这件事 但是,因为它听起来非常沉重,你可能不需要在第二天更新数据 如果是每天一次或更少,您可以创建一个包含员工ID的表格,并使用单独的MERGE更新来计算不同的字段
然后应用程序可以从该表中获取数据 每次需要更新数据时,您都可以找到一份计算此工作的工作 你可以在这里阅读有关合并命令的wiki,特别是oracle这里oracle。由于你使用单独的命令,你当然可以在不同的程序中这样做,如果方便的话。
例如:

  

开始
    执行立即'truncate table temp_table';

     

插入temp_table,从emps中选择emp_id;

     

MERGE INTO temp_table a             使用(                     选择名称)b             on(a.emp_id = b.emp_id)             当匹配时           UPDATE SET a.name = b.name; ...