日期:2014-05-17  浏览次数:21323 次

Oracle 如何设置不区分大小写查询(索引,全表扫描)?
最近从 MSSQL 转移到 oracle,自己草草学习了下,还真不简单。

感觉还挺喜欢 oracle 的,不过这个大小写区分查询,也着实坑了爹。

查阅了一下,方法有:

1、
SQL code
CREATE INDEX I_emp_ENAME ON emp(UPPER(EName));


坑爹的是查询一定要使用

SQL code
SELECT * FROM emp WHERE UPPER(ENAME) = 'ALLEN'


如果不使用“UPPER(ENAME)”,就不让使用索引查询了……

2、还有一种是每次连接都在会话中更改。这点也坑爹。

请问有其他办法吗?可以使用索引:

SQL code
CREATE INDEX I_emp_ENAME ON emp(EName);


也不用处处加 UPPER 或 LOWER 函数。

------解决方案--------------------
你这个1用的是函数索引,当然只有用该函数时才会走该索引咯。
同从mssql刚转oracle,一起学习吧。
这个函数索引就是为了mssql那种只要一用函数在左边就杯具的辅助功能而已吧,一般还是不会用的
------解决方案--------------------
你可以ENAME都只让存大写或者小写,不就完事了。
探讨
我也知道是函数索引。所以才想说有没有其他方式?

------解决方案--------------------
1.因为你建立的函数索引,所以你查询时当然要使用upper函数,才会走索引啊。
如果建立的是普通索引,就不需要每次转换了啊。

2.删除原来的函数索引,建立新的普通索引。
------解决方案--------------------
探讨
还有,为什么

SQL code

CREATE GLOBAL TEMPORARY TABLE t_test ON COMMIT DELETE ROWS
AS select * from NLS_SESSION_PARAMETERS;


无法插入临时表数据?只有复制了表结构?