UPDATE语句中的SQL case表达式

UPDATE语句中的SQL case表达式,sql,oracle,sql-update,case,oracle-data-integrator,Sql,Oracle,Sql Update,Case,Oracle Data Integrator,我正试图映射这个特定的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_SALA

我正试图映射这个特定的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\u CUSTOMER.TARGET
作为内部表达式:

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

可以使用以下命令重写:


将分配移动到
case
关键字之前,并将
SRC\u CUSTOMER.TARGET
作为内部表达式:

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

可以使用以下命令重写:


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

试一试

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

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

试一试

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

这是存储过程(PLSQL)代码,还是更新/选择的一部分?它是一个case语句还是一个case表达式?@jarlh它是更新/选择代码的一部分那么您需要一个case表达式,即在case之外执行赋值。这是存储过程(PLSQL)代码还是更新/选择代码的一部分?它是一个case语句还是一个case表达式?@jarlh它是更新/选择代码的一部分,那么您需要一个case表达式,即在case之外执行赋值。问题是SRC_CUSTOMER.TARGET是另一列,在这种情况下,如果找到它,则应检查其值7000@LorikBerisha固定的,将
SRC_CUSTOMER
更新为
SRC_CUSTOMER.TARGET
这是一个大小写表达式,而不是语句。@jarlh我想与内部表达式区别,我更新了问题是SRC_CUSTOMER.TARGET是另一列,在这种情况下,如果找到它,应该检查其值7000@LorikBerisha固定的,将
SRC_CUSTOMER
更新为
SRC_CUSTOMER.TARGET
这是一个大小写表达式,不是语句。@jarlh我想与内部表达式区别,我更新了