2016-03-15 5 views
2

У меня есть стол SC.LT_TABLE. Из-за какого-то плохого кодирования, моя программа делает это неправильно просьбой обДвойные кавычки в синониме оракула

SELECT * FROM SC.LT_TABLESC.LT_TABLE 

и, конечно, он не работает. Цель состоит в том, чтобы сделать этот запрос действительным.

Я пытался создать синоним, как

CREATE PUBLIC SYNONYM "SC.LT_TABLESC.LT_TABLE" FROM SC.LT_TABLE 

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

Итак, вопрос: могу ли я каким-то образом включить двойные кавычки в синоним? Или есть другой способ заставить этот запрос работать?

Я знаю, что вся проблема в том, смешно, но я не могу обновить код прямо сейчас :-)

Oracle 11g.

Спасибо.

+5

Если вы примете мое предложение, вы в основном сбрасываете больше poo на уже существующее poo. Почему бы не очистить первоначальный poo в первую очередь? –

+0

Я очистил оригинальный poo, но, к сожалению, я не могу обменять зараженный poo код с помощью бесплатного кода прямо сейчас. Поэтому я просто пытаюсь добавить немного poo, чтобы исправить лавину poo, которая может быть вызвана оригинальным poo. – ifuwannaride

+0

Кажется, что таблица была создана с использованием ** quoted-literal ** т.е. двойных кавычек, поэтому вы всегда должны использовать двойные кавычки. Нет выбора, кроме как жить с ним. –

ответ

0

Невозможно сделать то, что вы пытаетесь. Идентификатор SC.LT_TABLESC.LT_TABLE в SELECT * FROM SC.LT_TABLESC.LT_TABLE содержит три сегмента и будет разрешен таким образом.

Можно определить синоним под названием "SC.LT_TABLESC.LT_TABLE", но поскольку этот синоним содержит ., его можно использовать только с использованием синтаксиса цитируемого идентификатора.

Ключевым моментом здесь является то, что идентификатор SC.LT_TABLESC.LT_TABLE сначала анализируется на три сегмента, затем каждый сегмент разрешен, и нет возможности сделать два сегмента LT_TABLESC.LT_TABLE похожими на один сегмент, поскольку решение принимается до существующие объекты даже рассматриваются.