0

В настоящее время я переношу приложение на основе Code Igniter из MySQL в Oracle (11g) для конкретного клиента. Оба интерфейса MySQL и Oracle должны работать совместно (т. Е. Мы не можем отказаться от того или другого). БД MySQL использует около 100 таблиц, из которых ВСЕ ИДЕНТИФИКАЦИИ находятся в нижнем регистре. Когда я переношу эту БД в Oracle, используя инструмент SQL Developer SQL, я получаю «правильно» преобразованный БД, но ... со всеми прописными идентификаторами.Идентификаторы нижнего регистра Oracle SQL Developer для перенесенных баз данных?

Теперь для нормального использования это не проблема, но проблема возникает при использовании класса активной записи CI. Он генерирует запросы к действию: SELECT «somecolumn» ОТ «sometable», где «someothercolumn» = SomeValue

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

Исправление основного кода CI и/или приложения либо для того, чтобы все запросы использовали регистрозависимые идентификаторы (то есть путем отказа от использования «котировок вокруг идентификаторов») или для преобразования всех идентификаторов в верхние регистры «на лету», не требуется ИМО, так как потенциальное обновление будущей инфраструктуры затем скомпрометировано. Переименование всех идентификаторов MySQL, чтобы стать в верхнем регистре, также очень непривлекательный сценарий и оказывает еще большее влияние на само приложение - не обязательно.

Вместо этого я хочу, чтобы процесс миграции (то есть с использованием SQL Developer) просто соблюдал случай исходной БД и выполнял преобразование точно так же, как и до сих пор, за исключением того, что идентификаторы не могут быть изменены в их верхний регистр.

Я искал справедливую сделку в Интернете, чтобы найти способ достичь этого, и до сих пор это было безрезультатно.

Кто-нибудь знает, можно ли это сделать, и если да: как? Является ли преобразование ко всем прописным идентификаторам, возможно, глобальной настройкой БД, возможно? Я бы предположил, что это тривиальная вещь, но до сих пор я не мог понять ее, и какие небольшие ссылки, которые я натолкнулся, не выглядят очень многообещающе ...

ответ

0

Если вы можете получить скрипт схемы, созданный миграцией базы данных, все, что вам нужно сделать, это изменить идентификаторы (имена таблиц, имена имен, имена столбцов и т. д.), чтобы они были окружены двойными кавычками. (Я не уверен, что миграция SQL Developer фактически имеет возможность сохранить этот случай).

Без кавычек Oracle будет считать, что все идентификаторы не чувствительны к регистру. Однако это хранится внутренне как строки верхнего регистра в словаре данных. Использование меток кавычек заставит Oracle использовать точный случай для объектов схемы.

например.

create table Customers 
( 
    Name varchar2(100), 
    CreationDate date not null 
); 

создаст КЛИЕНТ внутри в данном-Dictionar и вы можете писать запросы, как:

select name, creationdate from customers; 

альтернативно:

create table "Customers" 
( 
    "Name" varchar2(100), 
    "CreationDate" date not null 
); 

будет создавать "Клиент" внутри.Вы можете только писать запросы, используя цитаты и точный случай:

select "Name", "CreationDate" from "Customers"; 
+0

вещь, которую я забыл упомянуть: я наткнулся на пост на форумах Oracle, который был в значительной степени в силу о том, что вы предлагаете. Это в этой теме: https://forums.oracle.com/message/10199667 Сначала это звучало многообещающе, но вокруг сообщения №6 стало ясно, что это трудный путь, а не тот, который легко поддается повторению , В свете такого обширного «исправления чего-то» было бы лучше исправить код CI. : O Я все еще надеюсь, что сам разработчик SQL (я использую v4.0) может как-то сказать уважать случай идентификаторов .... – user3005145

+0

Да, быстрый google показывает, что это распространенная жалоба при работе с codeigniter/oracle. Кажется, не так много других вариантов, не входя в исходный код. – Richard

0

я ударил это раньше и просто редактировать oci8_driver.php (../system/database/oci) следующим образом:

// The character used for excaping 
var $_escape_char = '"'; 

в

// The character used for excaping 
var $_escape_char = ''; 

Стюарт

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

  • Нет связанных вопросов^_^