1、使用navicat执行一条语句
SELECT
( CASE WHEN app.ORDER_NO IS NOT NULL THEN app.ORDER_NO
WHEN app.IS_RETURN = '1' THEN '退回' ELSE '未安排' END )
FROM
a app
看着没问题,执行的时报错。百思不得其解。然后换成pl/sql执行试下,同样错误,但是有错误提示:
2.细细思索,app.ORDER_NO、app.IS_RETURN用的都是NVARCHAR2,与中文有关?于是改写Sql:
SELECT
( CASE WHEN app.ORDER_NO IS NOT NULL THEN app.ORDER_NO
WHEN app.IS_RETURN = '1' THEN cast('退回' as nvarchar2(10)) ELSE cast('未安排' as nvarchar2(10)) END )
FROM a app
结果执行成功。使用cast()对目标数据进行类型改写成功。
3.我又把app.ORDER_NO、app.IS_RETURN用的都是VARCHAR2,再次执行1中的sql语句,结果执行成功,但是执行2的语句就会报同样的错误。
4.个人猜测(没有查询文献):ORACLE存储中文默认的是VARCHAR2或者我们可以自己设置默认哪种类型,如有问题欢迎探讨。