Oracle:使用where子句更新命令是否区分大小写?

Oracle:使用where子句更新命令是否区分大小写?,oracle,oracle11g,oracle10g,Oracle,Oracle11g,Oracle10g,SQL>从ORA_部门选择* 部门ID部门名称 SQL>更新ORA_DEPT set department_name='PR'where department_name='account' 0行已更新 SQL>更新ORA_DEPT set department_name='PR'where department_name='dev' 0行已更新 SQL>更新ORA_DEPT set department_name='PR'where department_name='dev' 更新的0行通常不

SQL>从ORA_部门选择*

部门ID部门名称


SQL>更新ORA_DEPT set department_name='PR'where department_name='account'

0行已更新

SQL>更新ORA_DEPT set department_name='PR'where department_name='dev'

0行已更新

SQL>更新ORA_DEPT set department_name='PR'where department_name='dev'


更新的0行通常不区分大小写,因为对象名称(表、列、过程、绑定变量等)通常不区分大小写。(它们可以区分大小写,但这与此处无关。)

您正在将该概念应用于数据,即字符串。地球上没有一种语言字符串不区分大小写

如果要使
where
子句不区分大小写,可以显式执行此操作:

...
where lower(department_name) = 'account'
或者,您可以使用“核选项”——您可以通过更改NLS选项,强制所有此类比较不区分大小写。即:

alter session set nls_comp = linguistic;
alter session set nls_sort = binary_ci;
请注意,您需要同时进行更改;如果
comp
参数是
binary
,或者
sort
参数不是
*\u ci
,您将无法得到想要的

使用“核选项”的风险由你自己承担,并且只有在你有很好的理由的情况下


而且,在任何情况下,在您的
update
语句中,如果您给出值
'PR'
,千万不要期望它会保存为
'PR'
,反之亦然;除非你在这个过程中间有一个触发器,或者其他一些愚蠢的事情。

当然<代码> DEV和'DEV '字面上不同。通过
从dual
中选择dump('dev')、dump('dev')逐个字符检查差异。
alter session set nls_comp = linguistic;
alter session set nls_sort = binary_ci;