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) 

fecha 字段是当前操作日期。不幸的是,这被保存为字符而不是日期。这就是为什么我需要将日期转换回字符。F_ult_vencim 是截止日期,hrem01 是操作应该远离截止日期的天数。(例如,这可能是 10,使新日期比到期日晚 10 天)

除此之外,当我们需要更改日期时,还有一些标准(某些债权人,某些部门,仅适用于未来的案件,从一定数量开始,仅适用于某种行动类型。)

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

如果我分别运行两个子查询,我会从两者中得到 2 个结果。我想要完成的是它连接这两个查询,并将字段更新为新值。这个值对于每种情况都会有所不同,因为每个到期日都会有所不同。

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

4

1 回答 1

0

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

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

尝试在两个子查询中从 FROM 中删除“proxima_gestion p”。那么,对 p 的引用将指向外部 UPDATE 查询。

于 2013-05-30T16:34:17.600 回答