【问题标题】:Can we use alias in merge statement我们可以在合并语句中使用别名吗
【发布时间】:2020-08-21 14:17:59
【问题描述】:
Merge into exchangeuplift up 
using (select up. Rowid row_id, up.forcedcharge/evcal.totalnotion)
       from exchange evcal 
       join exchangeuplift up 
       on evcal.exchangename = up.exchangename
       and up.isactive = 1 
       and up.forcedcharge <> 0 evcal.totalnotion <> 0 ) src 
       on (up.rowid = src.row_id) 
when matched then 
    update set forcedchargepro = (src.forcecharge/ evcal.totalnotion) 

错误:ora-00904 "evcal.totalnotion" 标识符无效

最后一行出现错误,我们可以在设置条件下使用除法

【问题讨论】:

  • 你的代码在你碰到那个错误之前有几个错误;我想你有一个额外的) 并缺少一个and,但很难确定。请发布您的实际代码和format it。即使那样我也不确定你在问什么;或者为什么 - 你已经为row_id 使用了别名?您的set 子句引用evcal.totalnotion,但evcal 仅在using() 子句的范围内,src.forcechargesrc 块没有它作为别名。所以不清楚您是想要原始值还是只需要计算结果(确实需要列别名)。

标签: oracle oracle11g sql-merge


【解决方案1】:

您的代码有几个错误,似乎是拼写错误或转录错误的混合,但看起来您可能正在尝试这样做:

merge into exchangeuplift up
using (
  select up.rowid row_id,
    up.forcedcharge / evcal.totalnotion result
  from exchange evcal
  join exchangeuplift up
  on evcal.exchangename = up.exchangename
  and up.isactive = 1
  and up.forcedcharge <> 0
  and evcal.totalnotion <> 0
) src
on (up.rowid = src.row_id)
when matched then update
  set forcedchargepro = src.result

我将using 子句中的计算结果赋予别名result,然后在set 子句中引用它。您不能在该子句中引用来自evcal 或内部up 的列。

using 子句中再次查看exchangeuplift 似乎有点多余;这也可能有效:

merge into exchangeuplift up
using exchange src
on (up.exchangename = src.exchangename)
when matched then update
  set up.forcedchargepro = up.forcedcharge / src.totalnotion
  where up.isactive = 1
  and up.forcedcharge <> 0
  and src.totalnotion <> 0

或者也许:

merge into exchangeuplift up
using exchange src
on (up.exchangename = src.exchangename
  and up.isactive = 1
  and up.forcedcharge <> 0
)
when matched then update
  set up.forcedchargepro = up.forcedcharge / src.totalnotion
  where src.totalnotion <> 0

db<>fiddle 使用基于代码似乎在做什么的虚构数据,因为您没有提供数据或预期结果。

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多