我有一张表格,其中包含未来的行动。我有第二个表,其中包含所有案例,包括案件的截止日期。而且我有第三张表,其中包含数字。
问题如下。我们的系统会根据未来的操作自动填充表格。但是对于某些客户,我们需要更改这些日期。我想为此创建一个更新查询,并通过我们的调度程序运行。但是,我现在有点陷入困境。
到目前为止我对代码的了解是:
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是当前的行动日期。不幸的是,这被保存为char而不是date。这就是为什么我需要将日期转换回char。 F_ult_vencim是截止日期,而hrem01是应该从截止日期起放置操作的天数。 (例如,这可能是10,在截止日期后10天生成新日期)
除此之外,当我们需要更改日期时,还有一些标准(某些债权人,某些部门,仅针对未来的案例,并且从特定金额开始,仅针对特定的行动类型。)
但是,当我尝试运行此查询时,我收到错误消息 ORA-01427:单行子查询返回多行
如果我单独运行两个子查询,我会得到两个子结果。我想要完成的是,它连接这两个查询,并将字段更新为新值。每个案例的价值都不同,因为每个截止日期都不同。
这甚至可能吗?如果是这样,怎么样?
答案 0 :(得分:0)
您收到错误是因为第一个SELECT为正在更新的表中的每一行返回了多行。
我看到的第一件事是UPDATE中表的别名与SELECTs(p)中的别名相同。因此,子查询中对p的所有引用都引用了子查询中的proxima_gestion 而不是外部查询。也就是说,子查询不依赖于外部查询,这是UPDATE所必需的。
尝试在两个子查询中从FROM中删除“proxima_gestion p”。然后,对p的引用将是外部UPDATE查询。