2013-05-30 147 views
0

我有一个表格,其中包含将来应有的操作。我有第二个表格,包含所有案件,包括案件的截止日期。我有第三个表格,里面有数字。更新表格与其他表格的组合字段

问题如下。我们的系统将自动填充我们的表格,以便进一步处理但对于某些客户,我们需要更改这些日期。我想为此创建一个更新查询,并通过我们的调度程序运行。不过,我现在有点困难。

我对到目前为止的代码是这样的:

UPDATE proxima_gestion p 
SET fecha = (SELECT To_char(d.f_ult_vencim + c.hrem01, 'yyyyMMdd') 
       FROM deuda d, 
         c4u_activity_dates c, 
         proxima_gestion p 
       WHERE d.codigo_cliente = c.codigo_cliente 
         AND p.n_expediente = d.n_expediente 
         AND d.saldo > 1000 
         AND p.tipo_gestion_id = 914 
         AND p.codigo_oficina = 33 
         AND d.f_ult_vencim > sysdate) 
WHERE EXISTS (SELECT * 
       FROM proxima_gestion p, 
         deuda d 
       WHERE p.n_expediente = d.n_expediente 
         AND d.saldo > 1000 
         AND p.tipo_gestion_id = 914 
         AND p.codigo_oficina = 33 
         AND d.f_ult_vencim > sysdate) 

领域出生日期是当前操作的日期。不幸的是,这被保存为char而不是日期。这就是为什么我需要将日期转换回char。 F_ult_vencim是截止日期,而hrem01是行为应该从截止日期开始放置的天数。 (例如,这可能是10,使得到期日期后10天的新日期)

除此之外,当我们需要更改日期时,还有一些标准(某些债权人,某些部门,仅限于未来的情况下,从一定的数量开始,只针对某种动作类型。)

但是,当我尝试运行此查询时,出现错误消息 ORA-01427:单行子查询返回多行

如果我单独运行这两个子查询,我会从两者中得到2个结果。我试图完成的是它连接这两个查询,并将该字段更新为新值。每个案件的价值都会有所不同,因为每个到期日都会有所不同。

这甚至可能吗?如果是这样,怎么样?

+0

您的proxima_gestion表中有您可以加入/合并的ID字段吗? – sgeddes

回答

0

您会收到错误消息,因为第一个SELECT正在更新表中的每一行返回多于一行。

我看到的第一件事是UPDATE中表的别名与两个SELECT(p)中的别名相同。因此,子查询中对p的所有引用都引用子查询中的proxima_gestion 而不是外部查询。也就是说,子查询不依赖于UPDATE所需的外部查询。

尝试在两个子查询中从FROM中删除“proxima_gestion p”。然后,对p的引用将是外部UPDATE查询。

相关问题