UPDATE语句中的SQL情况表达式

时间:2018-11-07 09:15:31

标签: sql oracle sql-update case oracle-data-integrator

我正在尝试映射此特定的SQL代码以用于数据仓库。

我有两列(TARGET)和(NET_SALARY),目的是在TARGET为700时将NET_SALARY映射为0,在其他情况下,子字符串净工资为1,30

我收到的错误是缺少右括号,如果有人可以清除它,我将很高兴。

P.S这两个列都是varchar2数据类型

CASE 
  WHEN SRC_CUSTOMER.TARGET = '700' THEN SRC_CUSTOMER.NET_SALARY = '0'
  ELSE SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30)
END

2 个答案:

答案 0 :(得分:1)

将分配移至case关键字之前,并将SRC_CUSTOMER.TARGET作为内部表达式:

SRC_CUSTOMER.NET_SALARY = 
CASE SRC_CUSTOMER.TARGET
WHEN '700' THEN '0'
ELSE SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30)
END

可以用decode function重写:

SRC_CUSTOMER.NET_SALARY = decode(SRC_CUSTOMER.TARGET,'700','0',SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30))

答案 1 :(得分:1)

如果这是在ODI映射/接口的上下文中,则只能使用SQL,而不能使用PL / SQL。您不能在第一个THEN中将值分配给SRC_CUSTOMER.NET_SALARY。实际上,您只需要设置所需的值,它将被映射到您的目标属性。

尝试

CASE 
  WHEN SRC_CUSTOMER.TARGET = '700' THEN '0'
  ELSE SUBSTR(SRC_CUSTOMER.NET_SALARY,1,30)
END