合并语句问题(主要用于更新)在阻止的情况下

本文关键字:情况下 更新 用于 问题 语句 合并 | 更新日期: 2023-09-27 18:33:17

我试图将某些数据从一个表(table1)插入到另一个表(table2),就像数据存在一样,只需更新数据或插入数据。但是我现在面临的问题是,当我添加最后一个条件时,例如如果像"mss%"这样的first_name,我必须插入其他 10 个SERVICE_TYPE_ID 20.但是这种情况条件并没有发生,并且所有情况条件都成功了。所以我想知道最后一个案例有什么问题

trim(b.first_name) like 'mss%'     
                                      THEN 10
                                      ELSE 20

这主要是合并更新部分失败并插入 20 而不是 10这是我的完整预言机查询

MERGE INTO table2 a
USING table1 b ON (a.second_name = b.first_name)
WHEN MATCHED THEN
  UPDATE
  SET a.friendly_name = TRIM(b.friendly_name),
    a.account_number  = TRIM(b.account_no),
    a.ne_type         = TRIM(b.ci_type),
    a.service_type_id = CASE
                        WHEN upper(trim(b.company_name)) LIKE '%MWAN%'
                             OR upper(trim(b.company_name)) LIKE '%MGWAN%'
                             OR upper(trim(b.company_name)) LIKE '%MWLAN%'
                             OR upper(trim(b.company_name)) LIKE '%MLAN%'
                             OR upper(trim(b.company_name)) LIKE '%DDOS%'
                             OR trim(b.first_name) LIKE 'mss%'
                          THEN 10 ELSE 20 END,
    a.to_locate_in_gis ='Y'
  WHERE a.account_number <> b.account_no
WHEN NOT MATCHED THEN
  INSERT (ne_slno, second_name, company_id, ne_type, ne_status, service_type_id)
  VALUES (s_node_seq_nextval,
          TRIM(b.first_name), TRIM(b.company_id), 
          TRIM(b.ci_type), TRIM(b.ci_status),
      CASE
      WHEN upper(trim(b.company_name)) LIKE '%MWAN%'
           OR upper(trim(b.company_name)) LIKE '%MGWAN%'
           OR upper(trim(b.company_name)) LIKE '%MWLAN%'
           OR upper(trim(b.company_name)) LIKE '%MLAN%'
           OR upper(trim(b.company_name)) LIKE '%DDOS%'
           OR trim(b.first_name) LIKE 'mss%'
        THEN 10 ELSE 20 END)
  WHERE SUBSTR(b.first_name, 1, 1) != ' '

所有案例条件都是成功的,除了指出trim(b.first_name) like 'mss%'

合并语句问题(主要用于更新)在阻止的情况下

在插入中,case 语句中的最后一个表达式是 trim(b.first_name) like 'mss%'

但是,然后插入合并语句的一部分具有谓词:WHERE SUBSTR(b.first_name, 1, 1) != ' '),它排除了mss之前有空格的所有行。

这可能是您问题的原因。我建议您从插入部分中删除该谓词或将or trim(b.first_name) like 'mss%'添加到 where 子句中。