Есть ли уровень абстракции, который делает базу данных похожей на Oracle?
Мы используем Oracle в производстве, но в нашей компании это сложно установить в средах разработки.
Есть ли способ позволить Perl (или любому другому языку) отправлять необработанные операторы SQL через модуль DBI (или эквивалентный модуль для любого другого языка для отправки команд SQL в базу данных), которые переводятся из Oracle SQL в MySQL или SQLite или что-то подобное? еще?
Таким образом, приложение будет думать, что оно взаимодействует с Oracle, но на самом деле будет разговаривать с другой, более простой в установке базой данных с открытым исходным кодом / бесплатной.
2 ответа
Это невозможно. Другие движки баз данных не могут обрабатывать запросы Oracle. Простейший запрос в Oracle, например, если вы хотите получить имя текущего пользователя:
select user from dual
Этот запрос использует DUAL
таблица, которой нет ни в одной другой СУБД. Существует также много специфичных для Oracle конструкций (CONNECT BY
, MINUS
и т. д.), которые не могут быть обработаны в других двигателях.
В вашей ситуации лучше всего создать одну установку Oracle на виртуальной машине, а затем скопировать ее образ на другие виртуальные машины для работы.
ANSI SQL - это уровень абстракции, на который вы ссылаетесь.
Предполагая, что все таблицы существуют в целевой базе данных и СУБД поддерживает ANSI SQL, ваш запрос будет безупречно перенесен в эту другую базу данных.
Если вы хотите использовать что-то, что не определено в стандарте, то это вряд ли будет работать правильно.
Это ссылка на позицию Oracle 11.2G в стандарте.
Говоря об Oracle, их решение проблемы состоит в том, чтобы предложить Oracle Database Gateways.