У меня есть сервер базы данных Oracle, работающий на машине. Клиенты выполняют операции через сборку внешнего интерфейса из другой компании, которая генерирует соответствующие SQL-запросы для этих операций.Oracle SQL Query rewriting
Внешнее приложение генерирует SQL-запросы, которые мы не можем изменить. Что я хотел бы знать, есть ли способ переписать SQL-запрос по его прибытии. Более конкретно, мы хотели бы иметь возможность изменять имена табличных пространств, значения атрибутов по умолчанию и, самое главное, параметры сжатия. Например, изменить этот запрос:
CREATE TABLE EXAMPLE_TABLE (
ID INTEGER NOT NULL,
AMOUNT FLOAT(126) DEFAULT 0.0,
TAG VARCHAR2(50) DEFAULT ' '
)
TABLESPACE EXAMPLE_TABLESPACE NOCOMPRESS
к:
CREATE TABLE EXAMPLE_TABLE (
ID INTEGER NOT NULL,
AMOUNT FLOAT(126) DEFAULT 2.0,
TAG VARCHAR2(50) DEFAULT ' '
)
TABLESPACE EXAMPLE_TABLESPACE_TWO COMPRESS FOR OLTP
Обратите внимание, что переписывает не ограниченно, чтобы создать заявление таблицы, но может быть применен к любым запросам SQL.
Любые идеи о том, как это сделать?
На самом деле 'CREATE TABLE ...' не ** SQL-запрос **. Если бы вы говорили о реальных * запросах * (т. Е. 'SELECT' или какой-либо DML), такая перепись не была бы проблемой. Тем не менее, в вашем случае это закончится в * внешнее приложение не должно вызывать любую команду SQL * –
Одним из возможных решений является синонимы. Увы, они не работают для табличных пространств или 'create table'. Я не думаю, что есть способ создания базы данных, чтобы делать то, что вы хотите. –
Как вы знаете, что кто-то пытается запустить этот код? Возможно, вы сможете выполнить то, что хотите, и изменить существующие объекты базы данных. – Bulat