2015-08-06 5 views
1

У меня есть сервер базы данных 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.

Любые идеи о том, как это сделать?

+1

На самом деле 'CREATE TABLE ...' не ** SQL-запрос **. Если бы вы говорили о реальных * запросах * (т. Е. 'SELECT' или какой-либо DML), такая перепись не была бы проблемой. Тем не менее, в вашем случае это закончится в * внешнее приложение не должно вызывать любую команду SQL * –

+0

Одним из возможных решений является синонимы. Увы, они не работают для табличных пространств или 'create table'. Я не думаю, что есть способ создания базы данных, чтобы делать то, что вы хотите. –

+0

Как вы знаете, что кто-то пытается запустить этот код? Возможно, вы сможете выполнить то, что хотите, и изменить существующие объекты базы данных. – Bulat

ответ

2

Вам может понравиться эта функция Oracle Database 12c, платформа SQL Translation Framework. Предназначен для приема T-SQL для SQL при переносе приложений из Sybase или SQL Server в Oracle, его также можно использовать для помощи с жестко запрограммированным SQL-производителем, который вам нужно оптимизировать/исправить.

Oracle Docs

Blog Example

+0

Отличный ответ, слишком плохо, что у моего сервера 11g, а не 12g :(Но это отличная функция, и я определенно буду более пристально смотреть. –

-1

Невозможно изменить запрос по его прибытии. Я думаю, что лучше было бы создать табличные пространства и все остальное, в соответствии с вашими стандартами и требованиями, перед запуском приложения.

0

Если я не правильно понял, что вы хотите сделать две вещи.

  1. Изменение табличного для этой таблицы
  2. Изменение метаданных из этой таблицы

Вы можете сделать так легко.

  1. alter table [table_name] move [new_tablespace]; -- it must exists (проверить табличную квоту в этом Тбе для этого пользователя)

  2. alter table [table_anem] MODIFY(AMOUNT DEFAULT 0.2);

+0

Спасибо Arulkumar – NavyPier