带有3个表的SQL存储过程

时间:2014-04-21 16:07:56

标签: sql plsql

我在这里链接了以下表格:tables

我所拥有的是:procedure

我需要列出属于给定客户的所有项目和任务(作为参数提供的客户编号)。在报告开头显示客户名称后跟第一个项目,显示项目和名称。对于每个项目下方显示的任务编号(按升序排列),描述,小时和开始日期。按照客户的总任务数和项目费用执行上一个任务,然后对客户的每个后续项目执行相同的操作。在报告的最后,给出所有任务的总小时数,以及报告的项目和任务的数量。

我不确定程序是如何运作的,所以对任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

nextproject游标在TASK与游标中使用的任何其他表之间没有定义任何关系,因此TASK中的每一行都连接到PROJECT和CUSTOMER的所有有效组合。这被称为"笛卡尔联合"并且可能不是你想到的。要纠正此问题,您需要稍微修改光标:

cursor nextproject is
  select p.pjno, c.custname, t.taskno, t.descrip, t.hrs, t.start_date
    from task T, project P, customer C
    where C.custno = P.custno and
          p.custno = custnum
      AND t.pjno = p.pjno;  -- ADDED

这可能会或可能不会解决您的所有问题,但它应该会引导您完成此任务。

SQLFiddle here对于那些想要刺伤它的人。

分享并享受。