Я бы не хотел менять чувствительность к регистру во всей базе данных или на уровне сеанса.
Есть ли способ сделать саму схему таблицы без учета регистра, чтобы эти запросы просто работали без изменений
Да, это возможно, но с версии 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;