2016-02-22 5 views
-1

Есть ли способ назвать мои таблицы, столбцы в Oracle DB в строчных буквах?Как скрыть объекты в базе данных Oracle?

Я ищу много, и некоторые рекомендации говорят, что я должен использовать двойные кавычки в создании так:

CREATE TABLE "test" (a number); 

Проблема состоит в следующем:

Это заставляет меня украшать все мои таблицы с double quotes через запрос!

Если я пишу:

SELECT * FROM test ; 

Я получу синтаксическую ошибку.

Я хочу назвать все мои таблицы, поля в нижнем регистре, потому что я буду использовать это в моей модели через ORM, которые используют (Pluralization and Singularization) функции (Entity Framework), так что если у меня есть таблица вроде этого:

CITY согласно соглашениям Oracle.

Эквивалент будет CITY субъект и плюрализация как навигационное свойство будет CITies !!

+1

Я бы, конечно, избегал использования двойных кавычек для обеспечения использования имен таблиц и столбцов в нижнем регистре. Хотя может быть эстетически неудобно видеть «CITies» в вашем ORM, боль от использования двойных кавычек в каждом SQL-заявлении намного хуже. И другого пути нет. –

+1

:(Я ненавижу Oracle. –

+4

Ненавижу ORMs :-) –

ответ

4

[TL; DR] Самое простое - никогда не использовать двойные кавычки вокруг имен объектов и просто позволить оракулу управлять чувствительностью к регистру по умолчанию.

Базы данных Oracle по умолчанию чувствительны к регистру; однако они также по умолчанию преобразуют все в верхний регистр, чтобы чувствительность к регистру была абстрагирована от вас, пользователя.

CREATE TABLE tEsT (column_name NUMBER); 

Тогда:

SELECT COUNT(*) FROM test; 
SELECT COUNT(*) FROM Test; 
SELECT COUNT(*) FROM TEST; 
SELECT COUNT(*) FROM tEsT; 

Будет все дают тот же результат и:

SELECT * FROM USER_TABLES; 

Выходы:

TABLE_NAME 
---------- 
TEST 

(обратите внимание на имя таблицы в верхнем регистре) ,

Если вы используете двойные кавычки, то оракул будет уважать ваше использование случае в имени таблицы:

CREATE TABLE "tEsT" (column_name NUMBER); 

и:

SELECT * FROM USER_TABLES; 

Выходы:

TABLE_NAME 
---------- 
TEST 
tEsT 

(Примечание: теперь есть две таблицы с именем TEST и tEsT, и оракул уважал случай se нечувствительность второго).

+0

Я хочу использовать нижний регистр без использования «двойных кавычек» в моих запросах –

+0

Если я создаю таблицу следующим образом: 'CREATE TABLE" tEsT "'. Я хочу написать запрос следующим образом: 'SELECT * FROM tEsT' –

+0

@AnynameDonotcare - вы не можете этого сделать. Почему бы вам не просто создать его без кавычек - тогда вы можете использовать любой случай в своих запросах, как показал MTO? –

1

Это действительно ужасно, и, возможно, нет необходимости рубить, но я полагаю, вы могли создать нижний регистр (поэтому цитируемый) синоним для вашего некотируемого имени таблицы:

create table test (a number); 
create synonym "test" for test; 

Тогда все это будет работать:

select * from "TEST"; 
select * from TEST; 
select * from TeSt; 
select * from test; 
select * from "test"; 

Или, если вы действительно, действительно хотите, чтобы сделать то же самое с именами столбцов можно использовать вид:

-- drop synonym "test"; 
create view "test" as 
select a as "a" from test; 

Ваш ORM может быть более счастливым с представлением, если он использует словарь данных для поиска столбцов. Но это все еще может не понравиться. Если это так, то он может использовать цитированные имена нижнего регистра, в то время как все ваши другие запросы могут использовать базовые некотируемые идентификаторы.

По-прежнему кажется, что это может вызвать путаницу в какой-то момент.

+0

Если бы вы могли посоветовать мне :) Примите имена плюрализации моих объектов в соответствии с моими ORM' ex: 'CITies' .. Или создайте представления и синонимы для всех моих таблиц? –

+2

Зависит от того, сколько таблиц у вас есть, и сколько головной боли обслуживания вы хотите иметь.Также стоит проверить, можно ли изменить поведение ORM, либо загладить имя с множественным именем, либо не указывать идентификаторы при разговоре с БД. –

Смежные вопросы