如何解决Oracle:使用where子句的更新命令区分大小写?
SQL> select *from ORA_DEPT;
DEPARTMENT_ID DEPARTMENT_NAME
10 HR
10 Account
20 TEST
30 QA
40 Dev
SQL> 更新 ORA_DEPT 设置部门名称='PR' where department_name='account';
更新了 0 行。
SQL> 更新 ORA_DEPT 设置部门名称='PR' where department_name='dev';
更新了 0 行。
SQL> 更新 ORA_DEPT 设置部门名称='PR' where department_name='dev';
更新了 0 行
解决方法
SQL 通常不区分大小写,因为对象名称(表、列、过程、绑定变量等)通常不区分大小写。 (它们可以区分大小写,但这在这里无关紧要。)
您将此概念应用于数据,即字符串。地球上没有一种语言不区分大小写。
如果您想让 Azure portal
子句不区分大小写,您可以明确地这样做:
where
或者,您可以使用“核选项”——您可以通过更改 NLS 选项来强制所有此类比较不区分大小写。即:
...
where lower(department_name) = 'account'
请注意,您需要两者更改;如果 alter session set nls_comp = linguistic;
alter session set nls_sort = binary_ci;
参数是 comp
,或者 binary
参数不是 sort
,您将不会得到您想要的。
使用“核选项”的风险由您自己承担,并且只有在您有充分理由的情况下。
而且,在任何情况下,在您的 *_ci
语句中,如果您提供值 update
,请不要期望它会被保存为 'PR'
,反之亦然;除非你有一个触发器在过程中这样做,或者其他类似的愚蠢的事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。