为什么我的嵌套case语句返回字符集不匹配?

dee*_*dee 4 sql oracle sql-update

我一直在构建一个相当简单的更新语句,其中包含一个嵌套的case语句来确定更新值.列描述与nvarchar(32)相同.对于这两个字段.

代码如下

UPDATE TableA t
SET t.Last_Col =
( CASE WHEN t.First_Col = 'ItemOne'
       THEN 'anItemOne'
       WHEN t.First_Col = 'ItemTwo'
       THEN CASE WHEN t.Second_Col = 'ItemTwo_A'
                 THEN 'aSecondItem_A'
                 ELSE 'aSecondItem'
                 END
ELSE 'NoItem'
END
);
Run Code Online (Sandbox Code Playgroud)

该代码有效但当我尝试使用t.First_Col代替字符串'NoItem'时,我得到的字符集不匹配.

ELSE t.First_Col
END
);
Run Code Online (Sandbox Code Playgroud)

不起作用.t.First_Col和t.Last_Col都是nvarchar2(32)并且我一直在尝试使用我认为不应该需要的演员.

ELSE CAST(t.First_Col AS NVARCHAR2(32)) 
END );
Run Code Online (Sandbox Code Playgroud)

任何提示或建议都非常感谢.一如既往地提前感谢.

Gor*_*off 5

case语句的类型由其中的第一个子句决定.在这种情况下,第一个子句是varchar字符串而不是nvarchar.

试试这个:

UPDATE TableA t
    SET t.Last_Col = (CASE WHEN t.First_Col = N'ItemOne'
                           THEN N'anItemOne'
                           WHEN t.First_Col = N'ItemTwo'
                           THEN (CASE WHEN t.Second_Col = N'ItemTwo_A'
                                      THEN N'aSecondItem_A'
                                      ELSE N'aSecondItem'
                                 END)
                           ELSE N'NoItem'
                        END ); 
Run Code Online (Sandbox Code Playgroud)