0

データが存在する場合は、データを更新するか、データを挿入するだけのように、あるテーブル( table1)から別のテーブル( )に特定のデータを挿入しようとしていましたが、今直面している問題は、次のような最後の条件を追加したときですtable2if first_name like 'mss%' 私は SERVICE_TYPE_ID 10 else 20 を挿入する必要があります.しかし、このケース条件では発生しておらず、すべてのケース条件が成功しています.したがって、最後のケース条件の何が問題なのかを知りたいです

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

これは主に Merge update セクションで失敗し、10 ではなく 20 を挿入しています。ここに私の完全な oracle クエリがあります

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%'

4

1 に答える 1