C#选择正在转换为Oracle SQL的查询,该查询带有意外的unicode字符;ORA-12704:字符集不匹配“;例外
我正在使用C#选择正在转换为Oracle SQL的查询,该查询带有意外的unicode字符;ORA-12704:字符集不匹配“;例外,c#,oracle,entity-framework,unicode,devart,C#,Oracle,Entity Framework,Unicode,Devart,我正在使用 甲骨文11g 德瓦特8.5.592 实体框架6.1.3 以下C#代码: 在Oracle中转换为以下SQL: SELECT 'First' || CASE WHEN CASE WHEN NOT (('Second' IS NULL) OR (6 = 0)) THEN ', ' ELSE '' END IS NULL THEN N'' WHEN NOT (('Second' IS NUL
- 甲骨文11g
- 德瓦特8.5.592
- 实体框架6.1.3
SELECT 'First' ||
CASE WHEN
CASE WHEN NOT (('Second' IS NULL) OR (6 = 0))
THEN ', '
ELSE '' END IS NULL
THEN N'' WHEN NOT (('Second' IS NULL) OR (6 = 0))
THEN ', '
ELSE '' END || 'Third' AS C1
FROM CLI.CLE_GROUPS "Extent1"
注意:C#代码故意没有意义。这只是为了强调,是字符串与条件字符串的串联导致了问题
运行此SQL时会导致“ORA-12704:字符集不匹配”异常。。。是N''导致了问题。架构的任何部分都没有使用unicode
有人知道为什么它决定将这一个空字符串设为unicode,甚至为什么空字符串和嵌套的case语句首先存在吗?它是自己放入
6=0
,还是省略了部分C代码?因为这会是一件非常奇怪的事情。我这样问是因为对于这些问题,拥有复制某些东西的精确代码通常很重要。如果它是重复的,这个问题至少可以归结为它的本质。这类东西是我不知道的原因,或者M6=0是随机介绍,这并不能使人充满信心。@Jeroen Mostert:是的,这似乎是同一个问题。谢谢你帮我找到它。实际上,我发现了一个不同的问题,它也建议使用拦截器(),今天上午我将要解决这个问题。虽然感觉有点像黑客,但似乎我别无选择。很久以来我第一次使用Oracle数据库,现在我想起来了原因。请随意添加您的评论作为答案,我会将其标记为答案。
SELECT 'First' ||
CASE WHEN
CASE WHEN NOT (('Second' IS NULL) OR (6 = 0))
THEN ', '
ELSE '' END IS NULL
THEN N'' WHEN NOT (('Second' IS NULL) OR (6 = 0))
THEN ', '
ELSE '' END || 'Third' AS C1
FROM CLI.CLE_GROUPS "Extent1"