我宁愿不改变整个数据库或会话中的区分大小写级别
是否有办法让表模式本身不区分大小写,这样这些查询就可以不加修改地工作
是的,这是可能的,但从版本Oracle 12cR2及以上。你可以把它定义在许多层面上(列,表,架构):
-- default
CREATE TABLE tab2(i INT PRIMARY KEY, name VARCHAR2(100));
INSERT INTO tab2(i, name) VALUES (1, 'John');
INSERT INTO tab2(i, name) VALUES (2, 'Joe');
INSERT INTO tab2(i, name) VALUES (3, 'Billy');
SELECT /*csv*/ *
FROM tab2
WHERE name = 'jOHN' ;
/*
"I","NAME"
no rows selected
*/
SELECT /*csv*/
column_id,
column_name,
collation
FROM user_tab_columns
WHERE table_name = 'TAB2'
ORDER BY column_id;
/*
"COLUMN_ID","COLUMN_NAME","COLLATION"
1,"I",""
2,"NAME","USING_NLS_COMP"
*/
列级:
CREATE TABLE tab2(i INT PRIMARY KEY, name VARCHAR2(100) COLLATE BINARY_CI);
INSERT INTO tab2(i, name) VALUES (1, 'John');
INSERT INTO tab2(i, name) VALUES (2, 'Joe');
INSERT INTO tab2(i, name) VALUES (3, 'Billy');
SELECT /*csv*/ *
FROM tab2
WHERE name = 'jOHN' ;
/*
"I","NAME"
1,"John"
*/
-- COLUMN LEVEL
SELECT /*csv*/
column_id,
column_name,
collation
FROM user_tab_columns
WHERE table_name = 'TAB2'
ORDER BY column_id;
/*
"COLUMN_ID","COLUMN_NAME","COLLATION"
1,"I",""
2,"NAME","BINARY_CI"
*/
表级:
CREATE TABLE tab2(i INT PRIMARY KEY, name VARCHAR2(100))
DEFAULT COLLATION BINARY_CI;
模式级:
CREATE USER myuser IDENTIFIED BY myuser
DEFAULT TABLESPACE users
DEFAULT COLLATION BINARY_CI;
检查http://stackoverflow.com/questions/2001165/oracle-11g-case-insensi tive-by-default – a1ex07
我正在寻找一种具有表和/或列级别控制的方法,我现在不想更改整个数据库。 –