SQL UPDATE 语句中的 case 表达式

SQL case expression in UPDATE statement

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

我有两列(TARGET)和(NET_SALARY),目的是当TARGET为700时将NET_SALARY映射为0,在其他情况下子串net salary 1, 30

我收到缺少右括号的错误

两列都是 varchar2 数据类型

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

将赋值移动到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))

如果这是在 ODI mapping/interface 的上下文中,您只能使用 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